如何编写shell脚本来获取特定列的第一条记录?

时间:2014-09-17 17:17:57

标签: shell unix awk

以下是一个用于演示的小文件。有两列,我想编写一个shell脚本来获取每个Name的第一个匹配项。

--- input.txt ---

Name,Count
Linux,2
Unix,10
Linux,10
Unix,4
Windows,6

---所需的output.txt ---

Name,Count
Linux,2
Unix,10
Windows,6

真正的input.txt要大得多(以GB为单位),所以可扩展的东西会很棒。

另外,如果之前已经提出类似的问题,我很抱歉(我无法通过搜索找到解决方案)。

2 个答案:

答案 0 :(得分:6)

这样就可以了:

awk -F, '!seen[$1]++' input.txt

-F,将输入字段分隔符设置为逗号。这意味着每行上的$1是逗号之前的部分(Name,Linux,Unix等)。 seen是一个数组,用于跟踪已经看过的$1的值。每次$1相同时,seen[$1]都会递增。该行仅在seen[$1]为0时打印,仅在第一次看到新密钥时才会显示。

答案 1 :(得分:2)

你也可以在awk这样做:

awk -F, '$1 in a{next}{a[$1]}1' input.txt > output.txt

此外,将mawk替换为其他awk版本肯定会为大型文件提供显着的速度提升。