複数のログファイルから情報を抽出する

複数のログファイルから情報を抽出する

.txt30の異なるファイルから.log収集された1行だけを含むファイルを作成しようとしています。 1行だけ抽出するには、次のようにしました。

$ 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)、この場合、スクリプトは次のようになりますERS224591seq 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

関連情報