awk 计算文件列中的行数

awk to count lines in column of file

我有一个大文件,我想使用 awk 来计算特定列 </code> 中的行数,在 <code>: 之前并且只计算 -uniq 条目,但似乎无法正确使用语法。谢谢:).

示例输入

chr1    955542  955763  +   AGRN:exon.1 1   0
chr1    955542  955763  +   AGRN:exon.1 2   0
chr1    955542  955763  +   AGRN:exon.1 3   0
chr1    955542  955763  +   AGRN:exon.1 4   1
chr1    955542  955763  +   AGRN:exon.1 5   1

awk -F: ' NR > 1 { count +=  } -uniq' Input

期望输出

1
$ awk -F'[ \t:]+' '{a[]=1;} END{for (k in a)n++; print n;}' Input
1
  • -F'[ \t:]+'

    这告诉 awk 使用空格、制表符或冒号作为字段分隔符。

  • a[]=1

    当我们遍历每一行时,这会为遇到的每个 </code> 值添加一个条目到关联数组 <code>a

  • END{for (k in a)n++; print n;}

    我们读完文件后,计算关联数组中的键数 a 并打印总数。

惯用的、可移植的 awk 方法:

$ awk '{sub(/:.*/,"",)} !seen[]++{unq++} END{print unq}' file
1

更简洁但仅供 gawk 使用的方法(由 length(array) 提供):

$ awk '{seen[]} END{print length(seen)}' file
1