awk字段计数算术

时间:2017-08-05 03:14:06

标签: bash awk

我正在尝试对列$ i和列$((i + 33))进行简单的列添加,我不确定语法是否正确。

首先将两个文件粘贴在一起,然后执行两个文件中的列添加。

谢谢!

paste DOS.tmp DOS.tmp2 | awk '{ printf "%12.8f",$1 OFS; for(i=2; i<33; i++) printf "%12.8f",$i+$((i+33)) OFS; if(33) printf "%12.8f",$33+$66; printf ORS}' >| DOS.tmp3

2 个答案:

答案 0 :(得分:1)

您是否尝试在ifile_1中添加列file_2?在这种情况下,我提供了一个例子:

paste <(seq -s' ' 33) <(seq -s' ' 33) | awk '{ for(i=1; i<=33; i++) { printf "%f",$i+$((i+33)) ; if(i!=33) printf OFS;} printf ORS}'

答案 1 :(得分:1)

awk中,与bash不同,变量扩展在变量名称前不需要美元符号($)。变量定义为a = 2,类似于print a

美元符号($) is used to refer to (input) fields。因此,print $1将打印第一个字段,print $a将打印变量a引用的字段,在我们的示例中为第二个字段。同样,print $a, $(a+3)将打印第二个和第五个字段(由OFS分隔)。

所有这些结合在一起,使您的程序看起来像:

awk '{ out = sprintf("%12.8f", $1)
       for (i=2; i<=33; i++) out = out sprintf("%s%12.8f", OFS, $i+$(i+33))
       print out }' numbers

请注意,我们首先使用sprintf将所有值打印到输出行变量outconcatenating,如out = out val,然后打印完整的输出记录{{1 }}