異なるファイルのタグに基づいて行を削除し、単一のファイルにマージ

異なるファイルのタグに基づいて行を削除し、単一のファイルにマージ

次のシナリオを満たすようにUnixスクリプトを開発する必要があります。

1.txt、2.txt、3.txtという3つのテキストファイルがあります。

そのファイルのデータは次のとおりです。

HDR|1|2|3|||||||||||||||||||||||
DTL|||||||||||||||||||||||||||||||
DTL|||||||||||||||||||||||||||||||
TLR|||||||||||||||||||||||||||||||

最初のファイル(1.txt)の場合、TLRタグに基づいて行を削除する必要があります。 2番目のファイル(2.txt)の場合は、TLRとHDRに基づいて行を削除する必要があります。 3番目のファイル(3.txt)の場合、HDRタグに基づいて行を削除する必要があります。

上記の作業を行った後、これら3つのファイルデータを1つのファイルに入れる必要があります。

ここでは、マージするファイルの数がわかりません。上記の3つのテキストファイルのように、ファイル名を直接ハードコードすることはできません。

このスクリプトをどのように実装できますか?

ベストアンサー1

これは次の方法で簡単に実行できます。回答~から最後の関連質問少し残った出力リダイレクト:

grep -vE "TLR" 1.txt > merged.txt
grep -vE "TLR|HDR" 2.txt >> merged.txt
grep -vE "HDR" 3.txt >> merged.txt

サブシェルを使用して次のコマンドを結合することもできます。

( grep -vE "TLR" 1.txt ;  grep -vE "TLR|HDR" 2.txt ; grep -vE "HDR" 3.txt  )> merged.txt

おすすめ記事