単一の公開フィールドを持つ行を削除する

単一の公開フィールドを持つ行を削除する

次のようにタブ区切りのファイルがあります。

123   some text
123   some different text
334   some other text
341   more text

私は2つのことをしたいと思います。 1つはすべてを数字で並べ替えることです(簡単に実行できます)、もう1つは数字がすでに存在する場合は行を削除することです。つまり、出力は次のようになります。

123   some text
334   some other text
341   more text

一意の数だけを含むファイルを取得しようとしています。

123
334
341

元のファイルに関連付けます。

join -j 1 justNumbers.txt original.txt

しかし、これは私に元のファイルを提供します。どんなアイデアがありますか?

答え1

一意性をソート/テストしたい場合最初特に、お使いのシステムにはGNUcoreutilsバージョンがあるので、sort次のものを使用できると思います。

sort -nu file

今すぐ。

$ sort -nu file
123   some text
334   some other text
341   more text


~からinfo coreutils 'sort invocation'

コマンドsort -usort | uniq同じですが、この同等性は任意のsortオプションには拡張されません。 たとえば、sort -n -u一意性を確認するときは、最初の数値文字列の値のみを確認します。sort -n | uniq 全体の生産ラインを調べながら。

答え2

この試みawk

awk '!($1 in a){a[$1];print}' file
123   some text
334   some other text
341   more text

これは、ファイルがソートされていると仮定します。

関連情報