web-dev-qa-db-ja.com

ユニークなラインを見つける

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

1
1
2
3
5
5
7
7

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

2
3

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

67
amprantino

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

   -u, --unique
          only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
70
Lev Levitsky

次のように使用します。

sort < filea | uniq > fileb
17
kasavbere

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'を使用します。

正しい方法の1つで、次を使用して呼び出します。#sort nonUnique.txt |ユニーク

実行例:

$ 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

スペースが印刷される可能性があるため、準備してください!

7
ashmew2

catおよびsortにパイピングすることにより、uniqコマンドを使用して「ファイル」内の一意の値を出力することもできます。

cat file | sort | uniq -u

5
skywardcode

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

4
Shiplu Mokaddim

sortはO(n log(n))時間かかりますが、

awk '!seen[$0]++'

awk '!seen[$0]++'awk '!seen[$0]++ {print}'の略語で、seen[$0]がゼロでない場合にline(= $ 0)を出力します。より多くのスペースが必要ですが、O(n)時間しかかかりません。

3
Vito Chou

uniqは、ファイルがソートされている場合、またはソートできる場合は問題ありません。何らかの理由でファイルをソートできない場合は、awkを使用できます。

awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'

3
user4401178

使用できます:

sort data.txt| uniq -u

この並べ替えデータと一意の値によるフィルタリング

2
blacker
sort -d "file name" | uniq -u

これは私のために同様のもののために働いた。配置されていない場合に使用します。並べ替えられている場合は、並べ替えを削除できます

これは私が最初に試した

skilla:~# uniq -u all.sorted  

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

猫をやった後-e all.sorted

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

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

ありがとうございました

0
amprantino