从1 awk中减去文件的值

时间:2019-11-04 05:53:56

标签: awk

我有一个文件,其中从第3列起数字小于1。我想从1中减去这些数字。文件看起来像这样。

q       q       0.6     0.3     0.6
q       a       0.4     0.2     0.5
a       q       0.3     0.2     0.3
2       z       0.99    0.3     0.8

为此,我使用awk命令。

awk -v OFS='\t' '{if(NR<=1){for(i=3;i<=NF;i++){$(i)=1-$(i);}}print;}' file1

但这给了我意外的结果。

q       q       0.4     0.7     0.4
q       a       0.4     0.2     0.5
a       q       0.3     0.2     0.3
2       z       0.99    0.3     0.8

我的预期输出是这个。

q       q       0.4     0.7     0.4
q       a       0.6     0.8     0.5
a       q       0.7     0.8     0.7
2       z       0.11    0.7     0.2

2 个答案:

答案 0 :(得分:3)

声明:

if(NR<=1)

仅在记录数为1或更少时才执行此操作。换句话说,仅对第一行执行此操作(因为没有行具有非正记录号)。

我可以肯定那不是您想要的:-)

改为使用此:

{ for (i = 3; i <= NF; i++) { $i = 1 - $i } ; print }

以下成绩单(格式很好)显示了它的作用:

pax> echo 'q   q   0.6    0.3   0.6
+++>       q   a   0.4    0.2   0.5
+++>       a   q   0.3    0.2   0.3
+++>       2   z   0.99   0.3   0.8' | awk '{for(i=3;i<=NF;i++){$i=1-$i};print}'

q   q   0.4    0.7   0.4
q   a   0.6    0.8   0.5
a   q   0.7    0.8   0.7
2   z   0.01   0.7   0.2

答案 1 :(得分:1)

只需删除线路记录测试:

awk -v OFS='\t' '{for(i=3;i<=NF;i++)$i=1-$i}1' file
q       q       0.4     0.7     0.4
q       a       0.6     0.8     0.5
a       q       0.7     0.8     0.7
2       z       0.01    0.7     0.2