2

file.txtこのような長いテキストファイル(これを呼び出します)を考えると、次のようになります。

編集済み

1 AA
2 ab
3 azd
4 ab
5 AA
6 aslmdkfj
7 AA

bashの同じファイルに少なくとも2回表示される行を削除するにはどうすればよいですか?私が言いたいのは、この結果が欲しいということです。

1 AA
2 ab
3 azd
6 aslmdkfj

特定のテキストファイルを指定して、同じ行を二重にしたくありません。コマンドを見せてくれませんか。

4

3 に答える 3

9

空白が重要であると仮定すると、一般的な解決策は次のとおりです。

awk '!x[$0]++' file.txt

(たとえば、「ab」という行は「ab」と同じとは見なされません。空白を別の方法で処理する場合は、データを前処理するのがおそらく最も簡単です。)

--EDIT--変更された質問を前提として、特定の列の後で一意性を確認したいだけだと解釈します。次のようにしてみてください。

awk '!x[ substr( $0, 2 )]++' file.txt

これは、最初の列を無視して、列2から行の終わりまでを比較するだけです。これは典型的なawkイディオムです。x特定の文字列が見た。初めて見たときは印刷されます。最初のケースでは、に含まれる入力行全体を使用しています$0。2番目のケースでは、2番目の文字を含むすべてのもので構成される部分文字列のみを使用しています。

于 2012-08-27T20:27:37.143 に答える
8

この簡単なスクリプトを試してください。

cat file.txt | sort | uniq

catファイルの内容を出力します、

sort重複するエントリを互いに隣接させます

uniq隣接する重複エントリを削除します。

お役に立てれば!

于 2012-08-27T20:26:58.573 に答える
4

コマンドはuniqあなたが望むことをします。

ただし、ファイルが最初にソートされていることを確認してください。連続する行のみがチェックされます。

このような:

sort file.txt | uniq
于 2012-08-27T20:25:55.427 に答える