gpt4 book ai didi

bash - awk 字符串不等式似乎不起作用

转载 作者:行者123 更新时间:2023-11-29 09:28:17 25 4
gpt4 key购买 nike

我有一个文件,我想在其中找到第三列和第四列不同的所有行。我的文件看起来像:

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" — 以数字方式评估为 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} 是隐含的,如果只有一个子句没有任何 Action 。因此,awk '$3 != $4'awk '$3 != $4 {print $0}' 相同......但请确保您没有编写代码让你的同龄人更难阅读。

关于bash - awk 字符串不等式似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21597342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com