1

以下は、file.txtという名前のタブで示されたファイルを(列1に基づいて)ソートされています

barbie  325 social activist
david   214 IT professional
david   457 mathematician
david   458 biologist
john    85  engineer
john    98  doctor
peter   100 statistician

オプション(ソートコマンドの場合は-tおよび-k)を使用して列1に基づいてuniqコマンドを実行したい

uniq -d (-t$'\t' -k1,1) file.txt [this is incorrect syntax in bracket , but i want to run it in similar way]

さて、これは非常に簡単ですが、私は自分の道を見つけることができません。

次のように出力を取得できるようにします。

david   214 IT professional
john    85  engineer

助けてください、よろしくお願いします:)

4

1 に答える 1

4

Debianuniqには以前このオプションがありましたが、互換性の理由から削除されました。独自のAWKまたはPerlスクリプトを簡単に作成できます。これにより、最初のフィールドが最初に出現する行のみが出力されます。

awk -F '\t' '!x[$1]++' file.txt

x[$1]$1最初のフィールド( );の内容の連想配列です。行ごとにインクリメントされますが、現在の行を印刷するかどうかを指定する条件としても使用されます。否定を使用すると、このフィールド値が以前に検出されたことがない場合にのみtrueになります。(注意:AWKスクリプトの一般的な形式は0以上でcondition { action }あり、両方の部分はオプションです。{action}欠落している場合、デフォルトのアクションは現在の行を出力します。[条件が欠落している場合、アクションは無条件に実行されます。])

于 2012-05-11T06:19:22.337 に答える