私の質問は、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
一時ファイルにはbaaabaabab
。aaaa
私は考えています:
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