3

如果我们有以下结果:

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 & cut 命令?可能使用 tr、head 或 tail?

4

4 回答 4

2

在这种情况下最优雅似乎

rev input | uniq -f1 | rev
于 2012-10-03T00:41:01.560 回答
0

这可以通过不同的方式完成,但我试图将自己限制在您建议的工具中:

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

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

于 2012-10-01T16:47:05.900 回答
0
awk -F, '{if(P!=$1)print;p=$1}' your_file
于 2012-10-01T16:51:15.253 回答
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
于 2012-10-03T00:35:39.893 回答