我正在尝试创建一个.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
这需要之前和之后的路径*
完全相同。
更新
如果您的文件按顺序排列,例如ERS224561
to 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