私のファイルには次の内容があります。
$ 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は隣接する要素のみを考慮します。これが私たちがそれらを分類しなければならない理由です。 ]