2つの別々のファイルで2行を比較するには?

2つの別々のファイルで2行を比較するには?

私の質問は、2つの別々のファイルの2行を比較する方法です。デフォルトでは2つのファイルがあり、file1には1行が含まれています。

${X##*a}

file2 には 1 行が含まれます。

baaabaabab

私が試したことは次のとおりです。

diff -u file1 file2 > file3

aaaaただし、これは望ましい結果を提供しません。また、2つのファイルは常に同じではありませんが、違いは常に行の先頭にあります。


aaaabaaabaababこれで、2つの変数(1つはwith、1つはwith)を持つようにプログラムを変更しましたa。これで、次のことができます。

echo ${var1##*$var2} > tempfile.txt

一時ファイルにはbaaabaababaaaa私は考えています:

echo ${var1//*$var2} > tempfile.txt

しかし、これはうまくいきません。

答え1

diff行単位で作業します。したがって、diff は、1 文字でも異なる場合、行が異なると見なします。

あなたの場合、できることの1つは、各文字が1行になるように入力データを変換することです。このfoldコマンドが役立ちます。だからあなたはこれを行うことができます:

$ diff <(fold -w1 file1) <(fold -w1 file2)
1,4d0
< a
< a
< a
< a
$ 

これは、入力ファイルに実際にファイルごとに1行しかない場合にのみ機能します。

この出力形式があなたに役立つかどうかわかりません。本当に「aaaa」文字列が欲しく、その違いが次のようになると確信している場合ただ入力ラインのある点で、次のようにして上記の出力をパイプできますawk

$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$ 
$

答え2

以下は、Perlを使用して最初のファイルの内容から2番目のファイルの内容を削除し、最初のファイルの残りの内容を出力ファイルに印刷する方法です。

perl -e '$x=<>; $y=<>; $x=~s/$y//; print $x' 1.txt 2.txt > out.txt

関連情報