2

awkorを使用して、ファイルの列の null とドットを検索して置換したいsed

ファイルの内容は次のとおりです。

02-01-12 28.46
02-02-12 27.15
02-03-12 
02-04-12 27.36
02-05-12 47.57
02-06-12 27.01
02-07-12 27.41
02-08-12 27.27
02-09-12 27.39
02-10-12 .
02-11-12 27.44
02-12-12 49.93
02-13-12 26.99
02-14-12 27.47
02-15-12 27.21
02-16-12 27.48
02-17-12 27.66
02-18-12 27.15
02-19-12 51.74
02-20-12 27.37

ドットと null 値は、ファイル内の任意の行に表示される可能性があります。null とドットを上記の値に置き換えたいとします。たとえば、

02-01-12 28.46
02-02-12 27.15
02-03-12 27.15     ****** replace with the above value
02-04-12 27.36
02-05-12 47.57
02-06-12 27.01
02-07-12 27.41
02-08-12 27.27
02-09-12 27.39
02-10-12 27.39     ****** replace with the above value
02-11-12 27.44
02-12-12 49.93
02-13-12 26.99
02-14-12 27.47
02-15-12 27.21
02-16-12 27.48
02-17-12 27.66
02-18-12 27.15
02-19-12 51.74
02-20-12 27.37
4

4 に答える 4

3

これはうまくいくかもしれません(GNU sed):

 sed -i '$!N;s/^\(.\{9\}\(.*\)\n.\{9\}\)\.\?$/\1\2/;P;D' file
于 2012-05-30T20:14:09.800 に答える
2
awk 'BEGIN {prev = "00.00"} NF < 2 || $2 == "." {$2 = prev} {prev = $2; print}' filename

データが欠落している可能性のある列が複数ある場合:

awk 'BEGIN {p = "00.00"} {for (i = 1; i <= NF; i++) {if (! $i || $i == ".") {if (prev[i]) {$i = prev[i]} else {$i = p}}; prev[i] = $i}; print}' filename
于 2012-05-30T20:30:21.117 に答える
1
$ awk -v prev=00.00 'NF<2 || $2=="." { print $1, prev; next }{prev=$2}1' input-file
于 2012-05-30T20:03:53.633 に答える
1

次の awk スクリプトが機能するはずです。

BEGIN {
    last="00.00"
}

{
    if ($2 != "" && $2 != ".") {
        last=$2
    }
    print $1 " " last
}
于 2012-05-30T19:51:48.470 に答える