Cat

For循環用兩個變數連接文件

  • October 22, 2020

總的來說,我對 Linux 比較陌生,希望有人能幫助我。

我想合併來自 4 個不同測序通道的 fastq.gz 文件。每個文件具有以下名稱:GC082_F4.lane1.1901.R1.fastq.gz帶有GC082_F4樣品名稱,laneX指泳道(1 到 4)並R1指正向或反向讀取(“R1”為反向,“R2”為正向)。

我想為每個樣本連接來自 4 個不同通道的文件,這分別用於正向讀取 (R1) 和反向讀取 (R2)。所以對於這個特定的樣本,這將是:

對於前鋒閱讀:

cat GC082_F4.lane1.1901.R1.fastq.gz \
 GC082_F4.lane2.1901.R1.fastq.gz GC082_F4.lane3.1901.R1.fastq.gz \
 GC082_F4.lane4.1901.R1.fastq.gz > GC082_F4.R1.fastq.gz

反向讀取:

cat GC082_F4.lane1.1901.R2.fastq.gz \
 GC082_F4.lane2.1901.R2.fastq.gz GC082_F4.lane3.1901.R2.fastq.gz \
 GC082_F4.lane4.1901.R2.fastq.gz > GC082_F4.R2.fastq.gz

但由於我必須為 +100 個樣本執行此操作,我想知道是否可以為此使用一個循環?

先感謝您!

只需辨識文件的獨特部分並將其分類:

cat GC082_F4.*.R1.fastq.gz > GC082_F4_R1.fastq.gz
cat GC082_F4.*.R2.fastq.gz > GC082_F4_R2.fastq.gz

因此,如果您有多個樣本,您可以執行以下操作:

for sample in GC082_F4 GC083_F4 GC084_F4 GC085_F4 ... GC0NN_F4; do
   cat "$sample".*.R1.fastq.gz > "$sample"_R1.fastq.gz
   cat "$sample".*.R2.fastq.gz > "$sample"_R2.fastq.gz
done

您還可以提供樣本名稱列表作為輸入:

while read sample; do
   cat "$sample".*.R1.fastq.gz > "$sample"_R1.fastq.gz
   cat "$sample".*.R2.fastq.gz > "$sample"_R2.fastq.gz
done < sample.names.txt

引用自:https://unix.stackexchange.com/questions/615815