2

我刚开始学习使用命令行。希望这不是一个转储问题。

我的目录中有以下文件:

L001_R1_001.fastq 
L002_R2_001.fastq 
L004_R1_001.fastq 
L005_R2_001.fastq
L001_R2_001.fastq 
L003_R1_001.fastq 
L004_R2_001.fastq 
L006_R1_001.fastq
L002_R1_001.fastq 
L003_R2_001.fastq 
L005_R1_001.fastq 
L006_R2_001.fastq

您可以在文件名中看到,它是 R1 和 R2 的混合,并且 L00 之后的数字没有排序。

我想按文件名的顺序连接文件,分别用于 R1 和 R2 文件。

如果我手动执行,它将如下所示:

# for R1 files
cat L001_R1_001.fastq L002_R1_001.fastq L003_R1_001.fastq L004_R1_001.fastq L005_R1_001.fastq L006_R1_001.fastq > R1.fastq


# for R2 files
cat L001_R2_001.fastq L002_R2_001.fastq L003_R2_001.fastq L004_R2_001.fastq L005_R2_001.fastq L006_R2_001.fastq > R2.fastq

你能帮我写一个我以后可以重复使用的脚本吗?谢谢!

4

2 回答 2

4
cat `ls -- *_R1_*.fastq | sort` >R1.fastq
cat `ls -- *_R2_*.fastq | sort` >R2.fastq

| sort大多数系统不需要,因为按ls名称对文件进行排序。

如果文件名包含空格,请先执行以下操作:

IFS='
'
于 2013-10-15T18:43:35.443 回答
1

尝试使用通配符*。它将按字母顺序自动扩展文件名。

cat L*_R1_001.fastq > R1.fastq
cat L*_R2_001.fastq > R2.fastq

编辑

如果上述命令没有提供所需的排序,请尝试使用Fredrik PihlLC_ALL=C建议的覆盖区域设置

LC_ALL=C cat L*_R1_001.fastq > R1.fastq
于 2013-10-15T18:44:36.977 回答