[英]awk field count arithmetic
我正在尝试对列$ 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
您是否要在file_1
和file_2
添加列i
? 在这种情况下,我提供一个示例:
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}'
在awk
,与在bash
不同,在变量名之前,变量扩展不需要美元符号( $
)。 变量的定义类似于a = 2
,其用法类似于print a
。
美元符号( $
)用于引用(输入)字段 。 因此, 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
打印所有值输出线变out
第一, 串联像out = out val
,然后打印具有完整的输出记录print
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.