所以这个问题困扰着我,我还有其他一百万个项目要做,所以我希望能够解决这个问题。到目前为止,我还没有找到答案。看起来很简单。我用过:
awk '$1' merged_counts.txt |sort|uniq -d|wc
并得到216行。但是,这个数字是不正确的。如果我使用
more merged_counts.txt|cut -f 1|sort|uniq -d|wc
我得到了271行,这是正确的。如果我使用
awk '{print $1}' merged_counts.txt |sort|uniq -d|wc
我也得到了271行,然而,我也失去了其余的字段。我无法弄清楚为什么它似乎是一种基本的东西。感谢您的任何帮助/建议。当然,我必须忽略一些事情。
档案示例:
B3GALT1 72 128 65 124 87 118 102 117 38 106 87 115 27 20 89 30
AMY1A 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
PSENEN 654 459 648 462 508 399 537 532 696 460 625 473 621 322 633 434
基因'AMY1A'是在两条DNA链上注释的基因之一,因此它在我的文件中出现两次。
答案 0 :(得分:2)
awk '$1'
(不要与awk '{print $1}'
混淆)将打印除空行或仅包含空格的行之外的所有内容,或者第一个字段计算为数值0的行。{ {1}}不会执行此操作,并且将包含空行和仅空白行。
答案 1 :(得分:2)
我在评论中看到你说I need to keep the entire line, but I need to filter for duplicates based only on the first field
所以让我们从那开始,让我们进一步假设你的字段被任何空白区分开,并且你总是希望在重复发生时打印第一行。
您使用的awk命令将是:
awk '!seen[$1]++' file
现在 - 用描述,输入和输出更新您的问题,告诉我们您还需要什么。
答案 2 :(得分:1)
cut
使用单个字符(默认情况下为tab
,但可通过-d
选项更改)以分隔字段,而awk
使用任何空格运行(默认情况下) ,可通过-F
选项更改。
awk '$1'
不被视为false时, $1
会打印整行,而不仅仅是第一个字段。这将导致更少的重复行(因为两行可能具有相同的第一个字段,但后续字段不同),并且行数较少。