过滤文本文件以根据第3列中的值获取唯一条目

时间:2012-10-18 13:35:08

标签: bash sorting filter

我知道一点bash,但是我遇到了过滤文件的问题。我将用一个例子来解释:

给定如下文件文件(file1):

10.10.12 bib24 Avenger goodone
10.10.12 bib21 The_Dark_Knight_Rises betterone
10.10.12 bib53 Avenger goodone
10.10.12 bib35 Ice_Age wow
11.10.12 bib53 TheAmazingSpiderMan nice
11.10.12 bib54 TheAmazingSpiderMan nice
11.10.12 bib01 Avenger goodone
12.10.12 bib29 Avenger goodone
12.10.12 bib11 TheAmazingSpiderMan nice
12.10.12 bib03 Ice_Age wow
12.10.12 bib98 Ice_Age wow
14.10.12 bib12 Ice_Age wow

这是我想要的结果(file2):

10.10.12 bib24 Avenger goodone
10.10.12 bib21 The_Dark_Knight_Rises betterone
10.10.12 bib35 Ice_Age wow
11.10.12 bib53 TheAmazingSpiderMan nice

所以我的问题是:我用哪个命令来获得这个结果(file2)? (即电影的第一次输入,而不考虑列/字段1,2和4)。

我希望它足够清楚。

3 个答案:

答案 0 :(得分:5)

这是使用awk的一种方式:

awk '!a[$3]++' file.txt

结果:

10.10.12 bib24 Avenger goodone
10.10.12 bib21 The_Dark_Knight_Rises betterone
10.10.12 bib35 Ice_Age wow
11.10.12 bib53 TheAmazingSpiderMan nice

答案 1 :(得分:4)

尝试做是:

sort -u -k3 file.txt

<强>输出

10.10.12 bib24 Avenger goodone
10.10.12 bib35 Ice_Age wow
11.10.12 bib53 TheAmazingSpiderMan nice
10.10.12 bib21 The_Dark_Knight_Rises betterone

答案 2 :(得分:0)

对于生锈的csh用户:

使用此:

awk '{c[$3]++} {if (c[$3] == 1) print $0}' file.txt

因为有了原始答案,所以会发生错误“未找到事件”(也可以使“!”正常字符!但这更容易阅读和使用)