0
>cat testing.txt
aaa bbb
aaa ccc
xxx yyy
zzz ppp
uuu vvv
uuu ttt

最初のフィールドに基づいて一意の行を表示し、行の最初の出現のみを出力したい

aaa bbb
xxx yyy
zzz ppp
uuu vvv

私がする時:

>uniq testing
I get:
aaa bbb
aaa ccc
xxx yyy
zzz ppp
uuu vvv
uuu ttt

これは私が望むものではありません。

4

4 に答える 4

3

別のawkソリューション:

awk '!_[$1]++' infile

パール:

perl -ane'
  print unless $_{$F[0]}++
  ' infile
于 2011-04-04T10:20:19.733 に答える
1

入力をuniqに渡す前に、必ず入力を並べ替えてください

猫testing.txt| 並べ替え| uniq -w3

于 2011-04-04T10:09:20.303 に答える
1

順番を気にしなければ

$ awk '(!( $1 in arr) ){arr[$1]=$0}END{for(i in arr) print arr[i]}' file

または、Ruby(1.9+) を使用できます。

$ ruby -ane 'BEGIN{h={}}; h[$F[0]]=$_ if not h.has_key?($F[0]) ; END{h.each{|x,y| puts "#{y}" }} ' file
aaa bbb
xxx yyy
zzz ppp
uuu vvv
于 2011-04-04T09:47:22.073 に答える
0

uniqは、-wフラグを使用したN文字のみのチェックをサポートしています。ファイルが実際にこのようになっている場合は、次のことができますuniq -w 3

于 2011-04-04T10:06:05.170 に答える