おそらく、これはシェルプログラマーにとって非常に基本的な質問です。しかし、テキストファイルAとBがあり、BがAのサブセットであるとします。
(AB)データを含むテキストファイルCを作成したい。
したがって、すべての共通行を省略します。
ファイルの行は数値データです。
id , some aspect, other aspec.
ありがとう。
sort a b | uniq -u
AとBの間で同じ線が必要な場合は、次を使用できます。uniq -d
sort a b | uniq -d
もちろん、これはAとBのデータがまったく同じであることを前提としています。データセットにスペースやタブを失うことはできません。ある場合は、、、または最初にデータをクリーンアップする必要がsed
ありtr
ますawk
。
編集
ピーターとして。Oが指摘したように、ファイルに正確な重複がある場合、これは失敗しますa
。それが問題である場合は、次のようにして修正できます。
sort <(sort -u a) b | uniq -u
これだけに使用されると呼ばれるユーティリティがありますcomm
:
comm -23 A B > C
ここで、-2
は「ファイルBに固有の行を拒否する」(ファイルBに固有の行を拒否する)を-3
意味し、「両方のファイルに共通の行を拒否する」を意味します。
@BartonChittendenは良い点を示しています:
comm -23 <(sort A) <(sort B) > C
を使用する1つの方法awk
。の代わりに任意のファイルにコンテンツを保存するようにリダイレクトしますSTDOUT
。
awk 'FNR == NR { data[ $0 ] = 1; next } FNR < NR { if ( $0 in data ) { next } print $0 }' fileB fileA
より効率的なコマンドで更新されました。Peter.Oに感謝します:
awk 'FNR==NR{data[$0]; next}; $0 in data{next}; 1' fileB fileA
awk 'FNR==NR{a[$0];next}(!($0 in a))' B A