2つのファイルを比較するときの異なる行出力

2つのファイルを比較するときの異なる行出力

改行で終わる文字列の数が同じ2つのテキストファイルがあります。両方のファイルの行は互いに一致します。各ファイルで行を繰り返すことができます。

最初のファイルまたは2番目のファイルでどの2行が異なるのか、出力されるのかをすばやく確認したいと思います。

ファイルA:

this is a string
this is another string
empty string

ファイルB:

this is A string
this is another string
Empty string

ファイルAの観点からは、1行目と3行目がファイルBの内容と異なるため、出力したいと思います。同様に、ファイルBの場合、ファイルの最初の行と3番目の行を出力します。

ファイルを比較する標準的な方法は、両方のファイルをソートしてからcommバイナリを使用することですが、ソートすると2つのファイル間の対応関係が破壊されます。私もこれをやろうとしましたが、diff他の仕事のために設計されているようです。

タブを使用して、2つのファイルの出力から別の行を区別することもできます。

ベストアンサー1

これを以下の観点から比較しますfileA

$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileB fileA
this is a string
empty string

この方法は、内容全体をfileBメモリに読み込みます。したがって、ファイルが大きい場合(メモリと比較して大きすぎる場合)、別の方法を選択する必要があります。

同様に、視点から出力を取得しますfileB

$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileA fileB
this is A string
Empty string

よりメモリ効率の高いアプローチ

この方法は一度に2行だけ読み取るため、メモリ効率が高くなります。次の観点から見てくださいFileA

$ awk '{a=$0;getline <"fileA";} $0!=a' fileB
this is a string
empty string

次の観点から見てくださいfileB

$ awk '{a=$0;getline <"fileB";} $0!=a' fileA
this is A string
Empty string

おすすめ記事