我有40个文件夹(COPD1 ... COPD40),所有文件夹都有一个名为summary.txt的文件。我想在所有这些文件夹中提取最后一行的最后一个元素(例如“90%”)。我知道怎么做一次:
awk '/Overall alignment rate:/{print $NF}' summary.txt
我不确定如何对所有40个文件夹执行此操作,并将提取的元素附加到新的.txt文件,以便最终产品如下所示:
COPD1 98%
COPD2 96%
...
COPD40 97.5%
任何帮助都将不胜感激。
答案 0 :(得分:2)
$ awk '/Overall alignment rate:/{print FILENAME,$NF}' COPD*/summary.txt
COPD1/summary.txt 90%
COPD2/summary.txt 90%
COPD3/summary.txt 90%
[...snip...]
注意:
Awk有一个变量FILENAME
,这是当前的文件名。
shell glob COPD*/summary.txt
将扩展为名为summary.txt
的所有文件,这些文件位于以COPD
开头的目录中。
FILENAME
当前输入文件的路径名。在一个开始 动作值未定义。在END动作中,值应为 处理的最后一个输入文件的名称。
答案 1 :(得分:0)
请你也试试。
awk 'val && FNR==1{close(val)} /Overall alignment rate:/{print FILENAME,$NF;val=FILENAME;nextfile}' COPD*/summary.txt
所以我在这里关闭文件(将在后端打开,如果在目录中有太多文件,可能会产生问题)。此外,因为我们只是寻找字符串(整体对齐率:),如果它发现它关键字nextfile
将跳转到下一个文件然后(所以我们可以通过NOT读取完整文件一旦获得匹配字符串来节省一些周期)。