というファイルがありますPKA1
このフォルダには、次の名前の複数のフォルダがあります。
1eV
、2eV
…。30eV
各サブフォルダには次のファイルがあります。PKA.dump
PKA.dump
各サブフォルダの20行を名前付きフォルダにコピーしたいと思いますdata.txt
。
findコマンドを使用してすべてのファイルを見つけることができることを知っていますPKA.dump
。
find . -type f -name PKA.dump
私も自分で書くことができることを知っていますsed
。
sed -i '20q;d' PKA.dump > data.txt
ただし、すべてのファイルを繰り返し使用する場合は、sed
次のようになります。
find . -type f -name PKA.dump | sed -i '20q;d' PKA.dump > data.txt
次のエラーが発生します。
sed: can't read PKA.dump: No such file or directory
助けが必要ですか?PKA.dump
ファイル1eV
など2eV
の20行を順番に名前付き3eV
ファイルに入れたいと思いますdata.txt
。
答え1
find . -name PKA.dump -type f -exec awk '
FNR == 20 {print; nextfile}' {} +
nextfile
、利用可能な場合(GNU awkとFreeBSDと最新mawk
バージョンまもなく標準に追加される予定)次のファイルに移動します。それ以外の場合は無視されます(変数の逆参照と同様nextfile
)。それでも動作しますが、ファイル全体を読みます。
それでも次のことができます。
find . -name PKA.dump -type f -exec sed '20q;d' {} \;
ただし、これはsed
ファイルごとに1つのコマンドを実行することを意味し、効率が悪くなります。