一致する行と連続した行を削除する(forループ)

一致する行と連続した行を削除する(forループ)

このトピックについて同様の質問と解決策を見つけましたが、問題を解決できませんでした。forループ以前に提案されたソリューションを使用してください。

ファイルB:

88569.abcrat
44689.defhom
3702.ghigop

234というファイルのテキストの例:

9606.jklpan
how is the weather
88569.abcrat
today is a sunny day
44689.defhom
tomorrow will be a rainy day
3702.ghigop
yesterday was a cloudy day
10116.zyxtak
i am happy to see rainbow

234というファイルの目的の出力:

9606.jklpan
how is the weather
10116.zyxtak
i am happy to see rainbow

その後、fileAにリストされている他のファイルに対して検索、一致、および削除プロセスを繰り返す必要があります。

ファイルA:

234
123
456

私は努力しています:

for i in $(cat fileA); do for j in $(cat fileB); do awk "/$j/ {while (/$j/ && getline>0) ; next} 1" $i; done; done

for i in $(cat fileA); do for j in $(cat fileB); do sed -e "/**$i/$j**/ { N; d; }" $i; done; done

しかし、これまでのところ、それらのどれも動作しません。何か問題があるようです。ここで助けを願っています。可能であれば、より良いコマンド提案があるかもしれません。

そして、2番目のスクリプトで太字の部分を正しく書いたかどうかを知りたいです。

PS:私はスクリプト初心者です。提供された助けに感謝します。ありがとうございます!

ベストアンサー1

私の理解によれば、名前がファイルに保存されているファイルが複数あり、保存されたテキストをfileA除いて、各ファイルのすべての内容を印刷することで、fileB次のことができます。

while read -r file_name
do
grep -v -f <(grep -A1 -f fileB "$file_name") "$file_name"
done < file

内容が印刷されますstdout

おすすめ記事