Unix uniq,sort& cut命令删除重复的行

时间:2012-10-01 16:20:45

标签: unix sorting command cut uniq

如果我们得到以下结果:

Operating System,50
Operating System,40
Operating System,30
Operating System,23
Data Structure,87
Data Structure,21
Data Structure,17
Data Structure,8
Data Structure,3
Crypo,33
Crypo,31
C++,65
C Language,39
C Language,19
C Language,4
Java 1.6,16
Java 1.6,11
Java 1.6,10
Java 1.6,2

我只想比较第一个字段(书名),并删除除每本书第一行以外的重复行,这些行记录最大数字。结果如下:

Operating System,50
Data Structure,87
Crypo,33
C++, 65
C Language,39
Java 1.6,16

任何人都可以帮助我,我怎么能使用uniq,sort& amp;削减命令?可能是使用tr,head还是tail?

4 个答案:

答案 0 :(得分:2)

在这种情况下最优雅的似乎是

rev input | uniq -f1 | rev

答案 1 :(得分:0)

这可以用不同的方式完成,但我试图限制自己使用你建议的工具:

cut -d, -f1 file | uniq | xargs -I{} grep -m 1 "{}" file

或者,如果您确定第一列中的单词不超过2个相同的单词,则可以使用:uniq -w3 file。这告诉uniq不要比前三个字符进行比较。

答案 2 :(得分:0)

awk -F, '{if(P!=$1)print;p=$1}' your_file

答案 3 :(得分:0)

如果您的输入已排序,则可以使用GNU awk,如下所示:

awk -F, '!array[$1]++' file.txt

结果:

Operating System,50
Data Structure,87
Crypo,33
C++,65
C Language,39
Java 1.6,16

如果您的输入未排序,则可以使用GNU awk,如下所示:

awk -F, 'FNR==NR { if ($2 > array[$1]) array[$1]=$2; next } !dup[$1]++ { if ($1 in array) print $1 FS array[$1] }' file.txt{,}

结果:

Operating System,50
Data Structure,87
Crypo,33
C++,65
C Language,39
Java 1.6,16