一意の行を見つけて、ファイルからすべての重複を削除するにはどうすればよいですか?私の入力ファイルは
1
1
2
3
5
5
7
7
結果を次のようにしたいと思います。
2
3
sort file | uniq
仕事をしません。すべての値が1回表示されます
一意の行を見つけて、ファイルからすべての重複を削除するにはどうすればよいですか?私の入力ファイルは
1
1
2
3
5
5
7
7
結果を次のようにしたいと思います。
2
3
sort file | uniq
仕事をしません。すべての値が1回表示されます
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 filea > fileb
sort<filea.txt | uniq>fileb.txt
。多分あなたは拡張機能を省略しました。私はMacOS Xを使用しています。filea.txt
他の場所に移動する必要がありますfileb.txt
sort
ようuniq
になるまでのパイプのポイントはsort -u file -o file
、重複する値を削除することです。つまり、OPがfileb
含まれ1,2,3,5,7
ている場合、ファイル拡張子2,3
によって達成される一意の行のみが必要です。uniq -u file
それに、あなたの答えは間違っています。
また、使用して、「ファイル」に一意の値をプリントアウトできcat
に配管のコマンドをsort
し、uniq
cat file | sort | uniq -u
uniq -uは、機能しなかったため、私を夢中にさせてきました。
したがって、その代わりに、Pythonを使用している場合(ほとんどのLinuxディストリビューションとサーバーにはすでにPythonがあります):
#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のマニュアルページから:
「注:「uniq」は、隣接していない限り、繰り返される行を検出しません。最初に入力を並べ替えるか、「uniq」なしで「sort -u」を使用することをお勧めします。また、比較は「LC_COLLATE」で指定されたルールを尊重します。」
で呼び出す正しい方法の1つ:#sort nonUnique.txt | uniq
$ 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
ファイルがソート可能である場合、または何らかの理由でファイルをソートできない場合は、次を使用できますawk
。
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
これは私にとっても同様の問題でした。配置されていない場合に使用します。並べ替えがあれば削除できます
これは私が試した最初のものでした
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
猫をやった後-eall.sorted
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
1行おきに末尾のスペースがあります:(すべての末尾のスペースを削除した後、機能しました!
ありがとうございました
sort file | uniq -u
コンソールに出力されます。