105

一意の行を見つけて、ファイルからすべての重複を削除するにはどうすればよいですか? 私の入力ファイルは

1
1
2
3
5
5
7
7

結果を次のようにしたいと思います。

2
3

sort file | uniq仕事をしません。すべての値を 1 回表示します

4

11 に答える 11

99

uniq必要なオプションがあります:

   -u, --unique
          only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
于 2012-12-08T14:25:25.973 に答える
33

次のように使用します。

sort < filea | uniq > fileb
于 2012-12-08T14:25:53.977 に答える
11

uniq -u はうまくいかなかったので、私を夢中にさせてきました。

その代わりに、Python がある場合 (ほとんどの Linux ディストリビューションとサーバーには既にあります):

notUnique.txt にデータ ファイルがあるとします。

#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.

uniqueData = []
fileData = open('notUnique.txt').read().split('\n')

for i in fileData:
  if i.strip()!='':
    uniqueData.append(i)

print uniqueData

###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))

空行のため、最終セットには '' またはスペースのみの文字列が含まれる場合があることに注意してください。後で削除できます。または、端末からのコピーで逃げるだけです;)

#

参考までに、uniq Manページから:

「注: 'uniq' は、それらが隣接していない限り、繰り返される行を検出しません。最初に入力をソートするか、'uniq' なしで 'sort -u' を使用することもできます。また、比較は 'LC_COLLATE' で指定された規則に従います。」

正しい方法の 1 つは、次のように呼び出すことです。ユニーク

実行例:

$ cat x
3
1
2
2
2
3
1
3

$ uniq x
3
1
2
3
1
3

$ uniq -u x
3
1
3
1
3

$ sort x | uniq
1
2
3

スペースが印刷される場合がありますので、準備してください。

于 2016-01-21T05:23:54.277 に答える
5

uniq -u < file仕事をします。

于 2012-12-08T14:17:57.870 に答える
0

これは私が最初に試した

skilla:~# uniq -u all.sorted  

76679787
76679787 
76794979
76794979 
76869286
76869286 
......

cat -e all.sorted を実行した後

skilla:~# cat -e all.sorted 
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $

2行ごとに末尾のスペースがあります:(末尾のスペースをすべて削除すると、機能しました!

ありがとうございました

于 2012-12-09T12:41:32.077 に答える