0

私はこれらのファイルでテストを行っています:

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq1_Glicose_1_ACTTGA_merge_R2_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R2_001.fastq
comp995_c0_seq1_Glicose_1_ACTTGA_merge_R2_001.fastq
comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq
comp995_c0_seq1_Xilano_1_AGTCAA_merge_R2_001.fastq

最初の _ (アンダースコア) まで同じコードを持ち、別の出力ファイルにコード R1 を持つファイルを取得したいと考えています。出力ファイルは、最初の _ (アンダースコア) までのコードに従って呼び出す必要があります。

-これは私のコードですが、出力ファイルの作成に問題があります。

#!/bin/bash

for i in {900..995}; do
    if [[ ${i} -eq ${i} ]]; then
        cat comp${i}_*_R1_001.fastq
    fi
done

-2 つの出力が必要です。

1 つの出力には、次のすべての行が含まれます。

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq

その名前はcomp900_R1.out

他の出力には、次の行があります。

comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq

その名前はcomp995_R1.out

最後に、私が言ったように、これは小さなテストです。同じ特性を持つ多数のファイルでスクリプトを動作させたいと考えています。

4

2 に答える 2

1

使用awk:

ls -1 *.fastq | awk -F_ '$8 == "R1" {system("cat " $0 ">>" $1 "_R1.out")}'

*.fastqすべてのファイルを にリストしawk、 で分割し_ます。8 番目の部分$8がであるかどうかを確認し、ファイルを最初の部分+にR1追加します。これはまたはになります。ファイル名にスペースやその他の特殊文字が含まれていないことを前提としています。cat >>$1_R1.outcomp900_R1.outcomp995_R1.out

結果:

comp900_R1.outからのすべての行を含むファイル

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq

comp995_R1.outからのすべての行を含むファイル

comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq
于 2014-02-05T16:57:47.250 に答える
1

一般的な解決策への私の刺し傷:

#!/bin/bash

for f in *_R1_*; do
   code=$(echo $f | cut -d _ -f 1)
   cat $f >> ${code}_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
done

を含むファイルを反復処理し_R1_、その出力を に基づいてファイルに追加しますcode

cut-d _ファイル名を分割し ( )、最初のフィールドを返す( )ことにより、コードを引き出します-f 1

于 2014-02-05T17:02:15.113 に答える