linux - 按特定内容对文件进行排序
问题描述
我需要对 157 个 gff3 格式的注释文件进行排序
其中一个来自转录组,其他来自基因组我的目的是将它们分为这两类
我想按主要区别字符进行排序:转录组文件包含“trinity”,基因组文件包含“scaffold”作为关键字,如下所示:
##gff-version 3 ##feature-ontology http://song.cvs.sourceforge.net/viewvc/song/ontology/sofa.obo?revision=1.269 ##interproscan-version 5.51-85.0 ##sequence-region scaffold1530size114558 1 630 脚手架 1530 尺寸 114558 。多肽 1 630 . + . ID=脚手架1530size114558;md5=6a2e960f92b2ccbad5284858e0e5aa60
和 :
##gff-version 3 ##feature-ontology http://song.cvs.sourceforge.net/viewvc/song/ontology/sofa.obo?revision=1.269 ##interproscan-version 5.51-85.0 ##sequence-region TRINITY_DN67221_c1_g2_i2 1 542 TRINITY_DN67221_c1_g2_i2。多肽 1 542 . + . ID=TRINITY_DN67221_c1_g2_i2;md5=e2ea1828cc04caa25aa6233aec734f88
这就是为什么我使用“head”命令时得到的原因
但我不知道如何对这些文件进行排序谢谢你的帮助
解决方案
好的,你还没有回来澄清,所以我会大胆猜测,并将我的解决方案建立在假设之上。
- 这些文件有一个可识别的模式,在我的情况下,它们都以
file
- 文件都在一个目录中
- 您希望分类文件最终位于两个单独的子目录中
实际工作由这两行完成:
grep -l TRINITY file* | xargs -n 1 -I{} mv {} transcriptomes/
grep -l scaffold file* | xargs -n 1 -I{} mv {} genomes/
这是一个成绩单,显示了如何实现我认为你想要的:
$ ls
file1 file11 file13 file15 file17 file19 file20 file4 file6 file8
file10 file12 file14 file16 file18 file2 file3 file5 file7 file9
$ mkdir {transcriptomes,genomes}
$ grep -l TRINITY file*
file11
file12
file13
file14
file15
file16
file17
file18
file19
file20
$ grep -l scaffold file*
file1
file10
file2
file3
file4
file5
file6
file7
file8
file9
$ grep -l TRINITY file* | xargs -n 1 -I{} mv {} transcriptomes/
$ grep -l scaffold file* | xargs -n 1 -I{} mv {} genomes/
$ ls
genomes transcriptomes
$ find
.
./genomes
./genomes/file1
./genomes/file10
./genomes/file3
./genomes/file2
./genomes/file4
./genomes/file6
./genomes/file7
./genomes/file5
./genomes/file8
./genomes/file9
./transcriptomes
./transcriptomes/file16
./transcriptomes/file12
./transcriptomes/file17
./transcriptomes/file13
./transcriptomes/file18
./transcriptomes/file11
./transcriptomes/file19
./transcriptomes/file15
./transcriptomes/file20
./transcriptomes/file14