awkコマンドは、ファイルパスが異なるファイル内のファイルを読み取ります。

awkコマンドは、ファイルパスが異なるファイル内のファイルを読み取ります。

path.txt一部のファイルのディレクトリパスを次の行に含むファイルがあります。

../../data/first.gz
../../data/second.gz

私は読みpath.txt、各行を読み、このファイル(.gzファイル)の内容を新しいファイルに保存したいと思います。

ここで同様の質問を見つけましたawkコマンドは、他のファイルの内容を含むファイルを読み取るために使用されます。そしてこのコード(ファイル名が私のデータと一致するように変更されます)。

awk '{ while ((getline a < $0) > 0) print a }' path.txt >> newfile

私は初めてawkとbashを使います。 zcatなどを使ってzipファイルを開き、内容をnewfileに印刷するために上記のコードを変更する方法がわかりません。コードの編集や新しいコードの提案を手伝うことができる人はいますか?よろしくお願いします。

ベストアンサー1

withの使用xargs(これは、オプションがzcatGNU実装であると仮定します):-r-d

<path.txt xargs -rd'\n' zcat -- >>output

各.gzファイルを別々の出力ファイルに出力するには、zcat実際にはここでシェルループを使用する必要はなく、次のようにインラインスクリプトを呼び出すだけです。

<infile xargs -rd'\n' -I{} sh -c 'zcat -- "$1" >output."${1##*/}"' xargs-sh {}

おすすめ記事