从多个日志文件中提取信息

从多个日志文件中提取信息

我正在尝试创建一个.txt仅包含从其他 30 个.log文件收集的一行的文件。为了只提取一行,我使用了这个:

$ sed -n '/Num mapped reads/p' /home/travc/seq_v2/AgamP4_v2/samples/ERS224561/qualimap/qualimap.log > /data/home/odkirling/Mali/Yeah1.txt

它工作得很好,但现在我需要对其他 29 个文件执行此操作,我该怎么做?

答案1

你可以尝试类似的东西

for filepath in $(ls -1 /home/travc/seq_v2/AgamP4_v2/samples/*/qualimap/qualimap.log);
do
  sed -n '/Num mapped reads/p' $filepath >> /data/home/odkirling/Mali/Yeah1.txt
done

这需要之前和之后的路径*完全相同。

更新

如果您的文件按顺序排列,例如ERS224561to ERS224591,则可以使用seq 61 91.在这种情况下,脚本将是

for filenum in $(seq -w 30 150);
do
  sed -n '/Num mapped reads/p' "/home/travc/seq_v2/AgamP4_v2/samples/ERS2245$filenum/qualimap/qualimap.log" >> /data/home/odkirling/Mali/Yeah1.txt
done

或者假设您在文本文件中有一个目录列表,格式如下

ERS224591
ERS224592
ERS224523
ERS224525
.
.
.

那么你可以做类似的事情

for dirname in $(cat dir_names.txt);
do
  sed -n '/Num mapped reads/p' "/home/travc/seq_v2/AgamP4_v2/samples/$dirname/qualimap/qualimap.log" >> /data/home/odkirling/Mali/Yeah1.txt
done

dir_names.txt是包含您的目录名称的文件。同样,您应该能够根据您的要求替换文件路径的任何部分。

答案2

sed对输入流进行操作,无需限制为单个文件;使用多个文件,例如通过在文件路径中提供通配符,例如.../ERS*/.../*log

相关内容