web-dev-qa-db-ja.com

Linuxシェルスクリプトを使用してテキストファイル内の一意の行のリストを生成するにはどうすればよいですか?

たくさんの行を含むファイルがあり、いくつかが繰り返されているとします。

line1
line1
line1
line2
line3
line3
line3

一意の行のリストを生成するために使用する必要があるLinuxコマンドは次のとおりです。

line1
line2
line3

ファイルがソートされていない場合、つまり繰り返し行がブロックにない場合、これは変更されますか?

12
I Z

出力がソートされてもかまわない場合は、

sort -u

これにより、重複が並べ替えられて削除されます

31
parkydr

catはコンテンツを出力し、sortにパイプしてそれらをソートし、uniqにパイプして一意の値を出力します。

cat test1.txt | sort | uniq

ファイルの内容がすでにソートされている場合は、sortの部分を実行する必要はありません。

9
go-oleg

一意の行を使用して新しい並べ替えファイルを作成します。

sort -u file >> unique_file

一意の行を含む新しいファイルを作成します(ソートされていません):

cat file | uniq >> unique_file
3
Kevin Sabbe

順序を気にしない場合最良の解決策は実際には次のとおりです。

sort -u file

大文字を無視するも必要な場合は、それを使用できます(その結果、すべての文字が大文字に変換されます):

sort -fu file

さらに良いアイデアのようです次のコマンドを使用することです:

uniq file

また、大文字と小文字を無視する(結果として、大文字と小文字を変更せずに、重複の最初の行が返されます):

uniq -i file

ただし、この場合、使用する場合とはまったく異なる結果が返される場合がありますsortcommand、なぜならuniqコマンドは、隣接していない限り、繰り返される行を検出しません

1
simhumileco