テキストファイルから重複項目を削除する

テキストファイルから重複項目を削除する

コマンドを使用していくつかのソートを実行していますuniq -d。私が望む結果を得られませんでした。

私のファイルは次のとおりです。

>TCONS_00000066 174     206  33
>TCONS_00000066 210     281  72
>TCONS_00000066 227     316  90
>TCONS_00000066 285     338  54
>TCONS_00000066 335     373  39
>TCONS_00000066 342     377  36
>TCONS_00006042 493     552  60
>TCONS_00006042 562     606  45
>TCONS_00006042 630     686  57
>TCONS_00006042 622     699  78
>TCONS_00006042 614     724  111
>TCONS_00006042 696     767  72

列1の重複エントリを削除したいです。

出力:

     >TCONS_00000066
     >TCONS_00006042

しかし、毎回空のファイルが表示されます。

uniq -d ファイル > 新しいファイル

別の方法がありますか?

答え1

Uniqは行の残りの部分をソートしたり削除したりしません。uniq -d重複した行のみが表示されます。これは、各行を1回表示することとは異なります(つまり、-d2回連続して表示する必要があります)。

まず、興味深い列を切り取り、並べ替えて一意の要素を見つけます。

cut -d ' ' -f 1 your_file | sort | uniq

答え2

awkを使用できます。

awk '!x[$1]++ { print $1 }' file

答え3

uniq -d入力に重複行のみをリストします。ファイルに重複行(完全とみなされる)が含まれていないため、何も出力されません。

目的の結果を得るには、最初の列を抽出してフィルタリングする必要があります。

cut -d\  -f1 file | uniq

ファイルがソートされているとします(uniq隣接する行のみをフィルタリングします)。

cut -d\  -f1 file | sort -u

awkまたは指摘したようにすることができますタレジン、最初の列だけを出力するいくつかのバリエーションがあります。

awk '!x[$1]++ { print $1 }' file

関連情報