获取不同的输出文件



我正在用这些文件进行测试:

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

-我想要两个输出:

一个输出将包含以下所有行:

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

最后,正如我所说,这是一个小测试。我希望我的脚本能够处理许多具有相同特征的文件。

使用awk

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

列出所有*.fastqawk的文件,在_上拆分。检查第 8:$8部分是否R1,然后将cat >>文件附加到第一部分$1+_R1.out中,这将是comp900_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

我尝试了一个通用解决方案:

#!/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)来提取代码。

相关内容

  • 没有找到相关文章

最新更新