改行で終わる文字列の数が同じ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