.txt
30の異なるファイルから.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
)、この場合、スクリプトは次のようになります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