我有大约 50 个文件,它们以以下格式命名:ERR*.log(即 ERR23432.log、ERR12356.log 等等...)。我想从每个文件中提取特定信息(值)。在每个文件中,行末尾都有值:final pair1 : Total reads after merging results from multiple database
和final pair2 : Total reads after merging results from multiple databases
。您可以在附件的第 62 行和第 63 行中看到这些行。现在,我想要一个脚本来提取这些值并添加它们以获得每个文件的单个值。然后,它会给出一个带有提取信息的输出文件,其中第一列是没有扩展名的文件名(即附加示例中的 ERR45666),第二列是附加值。任何人都可以帮我吗?
使用 GNU awk:
gawk '
BEGIN {print "SampleID","Read_counts"}
BEGINFILE {sum = 0}
/final pair[12] : Total reads after merging results from multiple database/ {sum += $NF}
ENDFILE {print substr(FILENAME,1,length(FILENAME)-4), sum}
' *.log
使用标准 (POSIX) awk,您可以轻松伪造BEGINFILE
using,FNR==1
但ENDFILE
模式更难;在这种情况下,我建议使用一个数组作为总和,以当前文件名为键,并在END
awk '
BEGIN {print "SampleID","Read_counts"}
FNR==1 {k = substr(FILENAME,1,length(FILENAME)-4)}
/final pair[12] : Total reads after merging results from multiple database/ {sum[k] += $NF}
END {for(k in sum) print k, sum[k]}
' *.log
请注意,使用这种方法,不能保证输出顺序与文件名的 glob 扩展顺序相同*.log
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句