使用连续数字填充空白,并复制先前的值

时间:2014-01-09 02:54:27

标签: sed awk grep

我有两个文件,一个包含:

2035.00 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100

2038.00 0 0 70 70 70 100 100 100 100 100 100 100 100 100 100 100 100 100

2040.00 0 0 60 60 80 80 80 80 80 80 80 100 100 100 100 100 100 100

,另一个包含:

2035.00 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100

2036.00 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100

2037.00 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100

2038.00 0 0 70 70 70 100 100 100 100 100 100 100 100 100 100 100 100 100

2039.00 0 0 70 70 70 100 100 100 100 100 100 100 100 100 100 100 100 100

2040.00 0 0 60 60 80 80 80 80 80 80 80 100 100 100 100 100 100 100

我希望用第一列的第一个值中的连续数字填充空白,并在第二个文件中看到的后续字段中填写其他字段

提前致谢

安娜

2 个答案:

答案 0 :(得分:2)

使用awk

awk 'NR==1{print $0 RS;a=$1;$1="";b=$0;next}
     NF!=0{if (a+1!=$i)for (i=a+1;i<$1;i++) printf "%.2f%s\n\n", i,b;print $0 RS;a=$1;$1="";b=$0;}' file

答案 1 :(得分:0)

您可以尝试:

awk -f a.awk file

其中a.awk是:

NF>0{
    a[($1+0)]=$0
}
END {
    for (i=2035; i<=2040; i+=0.5) {
       if (i in a) {
           b=a[i]; q=i; c=b
        } else {
            b=c
            z=sprintf("%.2f ",i)
            sub(/^[^[:blank:]]* /,z,b)
        }
        print b
    }
}

输出:

2035.00 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100
2035.50 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100
2036.00 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100
2036.50 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100
2037.00 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100
2037.50 0 0 70 70 90 100 100 100 100 100 100 100 100 100 100 100 100 100
2038.00 0 0 70 70 70 100 100 100 100 100 100 100 100 100 100 100 100 100
2038.50 0 0 70 70 70 100 100 100 100 100 100 100 100 100 100 100 100 100
2039.00 0 0 70 70 70 100 100 100 100 100 100 100 100 100 100 100 100 100
2039.50 0 0 70 70 70 100 100 100 100 100 100 100 100 100 100 100 100 100
2040.00 0 0 60 60 80 80 80 80 80 80 80 100 100 100 100 100 100 100