2013-06-19 37 views
0

我有一个列表,其中包含我正在执行awk的不同信息的数组。Awk充当替换

number location length value 

1  2   40  0.96 
---  5   45  0.97 
4  5   47  0.96 
---  5   35  0.95 
2  5   60  0.95 
---  3   55  0.96 


awk '{if ($2=5 && $3 >= 40 && $3<=50 && $6>=0.96) print $0}' Infile.txt 

它不会给我正确的行--- 5 45 0.974 5 47 0.96。 但是,如果我想要添加其他条件,如$1= ---,只具有第一输出--- 5 45 0.97

awk '{if ($2=5 && $3 >= 40 && $3<=50 && $6>=0.96 && $1="\-\-\-") print $0}' Infile.txt >List_position.txt 

它作为替代,先前的输出作为恢复和1 5 45 0.971 5 47 0.96。 我试过$1=---,$1='\-\-\-',他们都没有工作。如果我尝试使用$1="---",它会将$ 1替换为---

我是新的awk,我真的不明白为什么它会做替换。如果" "在awk中是替代,我怎么能把条件放在---

回答

3

你已经完成了一项任务=而不是比较==(并且赋值的结果因为既不是0也不是空字符串,所以赋值的结果为真)。

awk '{if ($2==5 && $3 >= 40 && $3<=50 && $6>=0.96 && $1=="---") print }' Infile.txt >List_position.txt 

也有在条件$2=5分配的“= VS ==”的问题,而是因为你期望看到5有(和感谢JS웃指出了这一点),你没有注意到它。

你也不需要反斜杠。

+0

+1拥有鹰眼! –

+0

谢谢!所以'='而不是'=='为$ 1后面的内容改变了吗? – Renaud

+0

事实上,'$ 2 = 5'写在我的脚本中写作$ 2 == 5。我应该看到区别 – Renaud