如果我们得到以下结果:
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?
答案 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