9

おそらく、これはシェルプログラマーにとって非常に基本的な質問です。しかし、テキストファイルAとBがあり、BがAのサブセットであるとします。

(AB)データを含むテキストファイルCを作成したい。

したがって、すべての共通行を省略します。

ファイルの行は数値データです。

id , some aspect, other aspec.

ありがとう。

4

4 に答える 4

12

使用sortしてuniq

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
于 2012-04-26T22:00:26.133 に答える
7

これだけに使用されると呼ばれるユーティリティがありますcomm

comm -23 A B > C

ここで、-2は「ファイルBに固有の行を拒否する」(ファイルBに固有の行を拒否する)を-3意味し、「両方のファイルに共通の行を拒否する」を意味します。

@BartonChittendenは良い点を示しています:

comm -23 <(sort A) <(sort B) > C
于 2012-04-27T01:55:25.623 に答える
4

を使用する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
于 2012-04-26T22:19:20.140 に答える
2
awk 'FNR==NR{a[$0];next}(!($0 in a))' B A
于 2012-05-09T11:22:00.263 に答える