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

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 に答える
0
awk -F, '{if(P!=$1)print;p=$1}' your_file
于 2012-10-01T16:51:15.253 に答える
0

これはさまざまな方法で行うことができますが、私はあなたが提案したツールに自分自身を制限しようとしました:

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

または、最初の列の単語に同じ文字が 2 つ以上含まれていないことが確実な場合は、次のように単純に使用できますuniq -w3 file。これはuniq、最初の 3 文字までしか比較しないように指示します。

于 2012-10-01T16:47:05.900 に答える