このトピックについて同様の質問と解決策を見つけましたが、問題を解決できませんでした。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
。