Awk $1 vs 削减 -f 1 - 为什么我得到不同的答案

  • 本文关键字:答案 vs 削减 Awk bash awk cut
  • 更新时间 :
  • 英文 :


所以这个问题困扰着我,我还有一百万个其他项目要做,所以我希望能解决这个问题。到目前为止,我还没有找到答案。这似乎很简单。我使用过:

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链上的基因之一,因此它在我的文件中出现了两次。

我在评论中看到你说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

现在 - 用描述、输入和输出更新您的问题,告诉我们您还需要什么。

awk '$1'(不要与awk '{print $1}'混淆)将打印除空行或仅包含空格的行或第一个字段的计算结果为 0 的行之外的所有内容。 cut -f 1不会这样做,并且将包括空行和仅空格行。

cut使用单个字符(默认tab,但可以通过-d选项进行更改)来分隔字段,而awk使用任何空格(默认情况下,可通过-F选项进行更改)。

$1不被视为 false 时,awk '$1'打印整行,而不仅仅是第一个字段。这将导致重复行更少(因为两行可能具有相同的第一个字段,但在后续字段中有所不同)和更少的行数。

最新更新