ソートuniqは他のファイルを処理できません。

ソートuniqは他のファイルを処理できません。

このコマンドがなぜ出てくるのか分かりません。

sort filename.txt | uniq

このファイルを処理できません。http://packetstormsecurity.com/files/32089/koran.gz.html

私も以下を使用しました。

awk '!seen[$0]++' koran.txt

perl -ne 'print unless $dup{$_}++;' koran.txt

そして、この特定のファイルを扱う人は誰もいないようです。理由をご存知ですか?

答え1

don_crissti彼の意見には主な問題が強調されています。彼は次のコマンドを実行してファイルの種類を決定します。

file koran  

...出力:

ASCII C++ program text, with CRLF, LF line terminators

末尾にあるCR(キャリッジリターン - 16進値)文字を削除する必要があります。\x0D一部入力ファイルの行。これは、CRMicrosoft Windowsスタイルの行末(CRLF)の最初の文字です。 2番目の(MS)文字はLF(改行)です。 Single はLFUnix スタイルの行終端に有効な単一文字です。CRファイルから不要な文字を削除する1つの方法は次のとおりです。

sed 's/\x0D$//' koran | sort -u

sort「同等の実行中に最初の出力のみ」オプションがあるため、-u実際にパイプする必要はありません。uniq


CRまたはこれが唯一のものであると確信している場合印刷されないファイルに文字がある場合は、文字ソート-iオプションを使用できますignore nonprintingCR

sort -iu koran

更新:次のユーザーの意見
に基づいています。@Francesco Mantovani一部以前に述べられていない他のファイルの入力行にもCRの前にスペースがあります。これは次の方法で簡単に処理できますsed

sed 's/[[:space:]]\+$//' male.txt female.txt | sort -u

sed -n lところで、「list current line」man sedコマンドに従って出力をパイピングして違いを発見しました。l視覚的に明確形態"。

関連情報