我有一个文件,其中从第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
答案 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