以下是一个用于演示的小文件。有两列,我想编写一个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为单位),所以可扩展的东西会很棒。
另外,如果之前已经提出类似的问题,我很抱歉(我无法通过搜索找到解决方案)。
答案 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
版本肯定会为大型文件提供显着的速度提升。