我有一个名为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
每个文件运行一个命令,效率会降低。