我有一个文件,我想找到第三列和第四列不同的所有行。我的文件看起来像:
chr1:109506687 [T/G] BOT TOP
chr1:109506690 [T/G] BOT TOP
...
我用来查找这些行的代码是
awk '$3 != $4 {print $0}' Cardio-Metabo_Chip_11395247_A.txt | shuf -n 10
问题是使用此命令我得到的结果如
rs3218791 [A/C] TOP TOP
第三栏和第四栏是相同的。
当我使用条件进行相等时,即==
我得不到输出,这告诉我awk从不认为两列$ 3和$ 4相等,尽管它们经常是这样。
聚苯乙烯。在vim中使用:set list
,我的文件看起来像:
chr1:109506687^I[T/G]^IBOT^ITOP$
chr1:109506690^I[T/G]^IBOT^ITOP$
....
我的awk版本是GNU Awk 3.1.8,但我无法想象必须做任何事情。这应该是正确的1.0
可能出现什么问题?
答案 0 :(得分:3)
虽然我无法重现你的问题(见下文),但我认为你是用数字而不是字符串来评估这些值(所有非空字符串 - 即"0"
- 数字评估为1
) 。试试这个:
awk '$3 != $4 "" {print $0}' test
将$4
连接成一个空字符串,因此应强制进行所需的字符串比较。
我没能用mawk 1.2和gawk 4.0.1重现你的问题:
$ cat test
chr1:109506687 [T/G] BOT TOP
chr1:109506690 [T/G] BOT TOP
rs3218791 [A/C] TOP TOP
$ mawk '$3 != $4 {print $0}' test
chr1:109506687 [T/G] BOT TOP
chr1:109506690 [T/G] BOT TOP
$ gawk '$3 != $4 {print $0}' test
chr1:109506687 [T/G] BOT TOP
chr1:109506690 [T/G] BOT TOP
shuf
管道不应该与它有任何关系,标签与空格也不应该有关系。 (虽然为了安全起见,我在测试中尝试了所有组合。)
有趣的提示:如果只有一个条款没有动作,则隐含{print $0}
。因此,awk '$3 != $4'
与awk '$3 != $4 {print $0}'
相同......但请确保您不会让同事更难以阅读。