2012-05-11 4 views
1

uniqコマンド - デリミタオプションを取得し、カラムに基づいて検索する方法?以下

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

FILE.TXTという名前のタブ区切らファイルには、私は、ソートの場合はオプション(-tおよび-kを使用してカラム1に基づき、uniqのコマンドを実行します(コラム1に基づいて)ソートされコマンド)

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 

、事前に感謝:)

+0

「214 ITプロ」はどこから来たのですか? (エンジニアは大文字で、スペルミスはすべて小文字ですか?) – tripleee

+0

ありがとう、私は編集しました。 – bioinformatician

答えて

3

Debianのuniqこのオプションを持っていたが、それは互換性の理由から削除されました。独自のAWKまたはPerlスクリプトを簡単に作成できます。これは、最初のフィールドの最初の発生と行のみを印刷:

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

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

関連する問題