Extrai informações de vários arquivos de log

0

Estou tentando criar um arquivo .txt que contém apenas uma linha reunida de outros arquivos de 30 .log . Para extrair apenas uma linha, usei isto:

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

Funciona muito bem, mas agora preciso fazer isso para outros 29 arquivos, como posso fazer isso?

    
por user117970 14.11.2018 / 21:47

2 respostas

0

Você pode tentar algo como

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

Isso precisará do caminho antes e depois de * ser exatamente o mesmo.

Atualizar

Se os seus arquivos estiverem em sequência, digamos ERS224561 a ERS224591 , você poderá usar seq 61 91 . Neste caso, o script será

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

Ou digamos que você tenha uma lista de diretórios em um arquivo de texto, no seguinte formato

ERS224591
ERS224592
ERS224523
ERS224525
.
.
.

então você pode fazer algo como

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 é o arquivo que contém os nomes dos seus diretórios. Da mesma forma, você deve ser capaz de substituir qualquer parte do caminho do arquivo com base em seus requisitos.

    
por 14.11.2018 / 22:25
0

sed opera em um fluxo de entrada que não precisa ser limitado a um único arquivo; use vários arquivos, por exemplo, fornecendo caracteres curingas nos caminhos dos arquivos como .../ERS*/.../*log

    
por 14.11.2018 / 22:24