我刚开始学习使用命令行。希望这不是转储问题。
我的目录中有以下文件:
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
你能帮我写一个我以后可以重复使用的脚本吗? 谢谢!
答案 0 :(得分:4)
cat `ls -- *_R1_*.fastq | sort` >R1.fastq
cat `ls -- *_R2_*.fastq | sort` >R2.fastq
大多数系统都不需要| sort
,因为ls
按名称对文件进行排序。
如果文件名包含空格,请先执行此操作:
IFS='
'
答案 1 :(得分:1)
尝试使用通配符*
。它将按字母顺序自动扩展文件名。
cat L*_R1_001.fastq > R1.fastq
cat L*_R2_001.fastq > R2.fastq
编辑:
如果上述命令未提供所需的排序,请尝试使用Fredrik Pihl
提取的LC_ALL=C
覆盖区域设置
LC_ALL=C cat L*_R1_001.fastq > R1.fastq