Dataというフォルダに25個の関連ファイルのペアがあります。ファイル名は私が到達するまで(または私が持っているファイルのペアの数) 。 、およびなどでtcr1_r1.txt
指定されます。私の問題は、それらをペアにリンクし、バッチファイルの各ペアに対してコマンドを実行する必要があることです。例:tcr1_r2.txt
tcr2_r1.txt
tcr2_r2.txt
tcr25…
注文する tcr1_r1.txt tcr2_r2.txt 注文する tcr2_r1.txt tcr2_r2.txt
どうすればいいですか?ループを考えていますが、各コマンドでファイルを分離して置き換えることはできないようです。入れ子になったループを試しましたが、各「r1」ファイルとすべての「r2」ファイルのみが実行されます。
for filename1 in /Data/*_r1.txt
do
for filename2 in /Data/*_r2.txt
do
echo "$filename1 and $filename2"
done
done
使ってみました。ジェフ・シャラーの答え。私が試した正確なシェルファイル行は次のとおりです。
#!/bin/bash
for first in /mnt/data/Sequencing_core/Data/Raw_data/062419_TCRB_Vanessa_Danielle/20190624_FS10000703_3_BPC29606-1232/Alignment_1/20190625_132145/Fastq/*R1_001.fastq.gz
do
echo "$first"
echo "${first/_R1_001.fastq.gz/_R2_001.fastq.gz}"
done
私が何かを見逃しているようです。 「交換エラー」エラーメッセージが表示されます。
答え1
ファイルの総数に興味があるかどうかに応じて、2つの方法があります。
最初の方法では、ファイル数が25個(具体的には1〜25個)であることがわかります。
for index in {1..25}
do
command tcr"${index}"_r1.txt tcr"${index}"_r2.txt
done
上記では、(bash)シェルは{1..25}
完全な数値セットに展開されます。次に、その数をペアのファイル名の適切な場所に置き換えます。
2番目の方法は、ファイルがいくつあるかわからないか気にしないことです。
for first in tcr*_r1.txt
do
command "$first" "${first/_r1.txt/_r2.txt}"
done
上記では、すべての「r1」ファイルを繰り返し、「_r2.txt」ペアを「_r1.txt」部分に置き換えます。
答え2
ただ使えますxargs
:
echo /Data/*_r[12].txt | xargs -n 2 the-command