如何从目录内的文件中提取特定信息?

如何从目录内的文件中提取特定信息?

我有大约 50 个文件,其命名格式为:ERR*.log(即 ERR23432.log、ERR12356.log 等...)。我想从每个文件中提取特定信息(值)。在每个文件中,行尾都有值:final pair1 : Total reads after merging results from multiple databasefinal pair2 : Total reads after merging results from multiple databases。您可以在第 62 行和第 63 行中看到这些行随附的文件。现在,我想要一个脚本来提取这些值并将它们相加,以获得每个文件的单个值。然后,它将给出一个包含提取信息的输出文件,其中第一列是没有扩展名的文件名(即附件示例中的 ERR45666),第二列是添加的值。有人能帮帮我吗?

答案1

使用 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使用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

相关内容