【发布时间】:2014-02-08 03:41:47
【问题描述】:
我有一个文件,我想在其中查找第三列和第四列不同的所有行。我的文件看起来像:
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 中应该是正确的
可能出了什么问题?
【问题讨论】:
-
我在 OSX 上试过这个(无法尝试 shuf -n 10 部分),但是当我运行命令时 rs3218791 没有出现。是否可能与
^I匹配,这就是我所看到的可能是原因。 -
是的,可能是 awk 将制表符和换行符视为列值的一部分,但这很奇怪。
-
默认情况下,制表符也是一个分隔符,如空格,所以这不是问题。不幸的是,我也无法在 OSX 上尝试
shuf。 -
您也可以尝试使用
!~或~代替!=来查看它的作用。 -
!~ 和 = 做了同样的事情,但是谢谢你的建议。