重複項目から1つの値のみを印刷[重複]

重複項目から1つの値のみを印刷[重複]

私のファイルには次の内容があります。

$ cat file.txt
code-coverage-api 
jsch 
cloudbees-folder 
apache-httpcomponents-client-4-api 
apache-httpcomponents-client-4-api 
jsch 
apache-httpcomponents-client-4-api 
jsch 
apache-httpcomponents-client-4-api 
jackson2-api 
apache-httpcomponents-client-4-api 
workflow-api 
echarts-api 
workflow-api 
envinject-api 
workflow-durable-task-step 
apache-httpcomponents-client-4-api 

私の予想結果は次のとおりです。

code-coverage-api 
jsch 
cloudbees-folder 
apache-httpcomponents-client-4-api  
jackson2-api 
workflow-api 
echarts-api 
envinject-api 
workflow-durable-task-step 

現在、以下のようにコンテンツを並べ替えた後、重複項目(1つの要素を除く)を手動で削除しています。

$ cat file.txt |sort

ファイルに重複要素を1つだけ保持し、残りの重複要素をリストから削除する方法はありますか?また、一部の要素に重複項目がないことに注意してください。

答え1

出力に行番号を追加してから、2番目のcat -nフィールドで一意に並べ替えることができます。
次に、最初のフィールドを数字でソートして元の順序を維持し、次を使用して行番号を削除しますcut

$ cat -n file.txt | sort -uk2,2 | sort -nk1,1 | cut -f2
code-coverage-api
jsch
cloudbees-folder
apache-httpcomponents-client-4-api
jackson2-api
workflow-api
echarts-api
envinject-api
workflow-durable-task-step

答え2

ファイルの一意の要素を取得するには、次のようにします。

cat file.txt | sort | uniq

重複を削除したい場合。その後、次のコマンドでファイルを更新できます。

cat file.txt | sort | uniq > file.txt

[注:uniqは隣接する要素のみを考慮します。これが私たちがそれらを分類しなければならない理由です。 ]

関連情報