一意の行を見つけて、ファイルからすべての重複を削除するにはどうすればよいですか? 私の入力ファイルは
1
1
2
3
5
5
7
7
結果を次のようにしたいと思います。
2
3
sort file | uniq
仕事をしません。すべての値を 1 回表示します
uniq
必要なオプションがあります:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
次のように使用します。
sort < filea | uniq > fileb
uniq -u はうまくいかなかったので、私を夢中にさせてきました。
その代わりに、Python がある場合 (ほとんどの Linux ディストリビューションとサーバーには既にあります):
#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
uniq -u < file
仕事をします。
これは私が最初に試した
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行ごとに末尾のスペースがあります:(末尾のスペースをすべて削除すると、機能しました!
ありがとうございました