根据文件名中的编号以特定顺序排列cat文件


12

我有一个名为文件file.88_0.pdbfile.88_1.pdb...file.88_100.pdb。我想要cat它们,以便file.88_1.pdbfile.88_0.pdbfile.88_2.pdb之后等粘贴file.88_1.pdb。如果这样做cat file.88_*.pdb > all.pdb,文件将按以下顺序组合:0 1 10 11 12 13 14 15 16 17 18 19 2 20...等。如何按顺序将它们组合在一起0 1 2 3 4 5 6...


1
顺便说一句,如果您在现场工作,您可能会对我们新的生物信息学站点感兴趣。
terdon

Answers:


24

采用 brace expansion

cat file.88_{0..100}.pdb >>bigfile.pdb

要忽略打印不存在的文件的错误消息,请使用:

cat file.88_{0..100}.pdb >>bigfile.pdb 2>/dev/null

zsh外壳程序中,您还可以使用(n)globlob限定符请求对glob进行数字排序(与默认的字母顺序相反):

cat file.88_*.pdb(n) >>bigfile.pdb 2>/dev/null

3
cat $(for((i=0;i<101;i++)); do echo -n "file.88_${i}.pdb "; done)

或者,关于Jesse_b的评论:

cat $(for((i=0;i<101;i++)); do test -f "file.88_${i}.pdb" && echo -n "file.88_${i}.pdb "; done)


2

尝试:

filedir="/path/to/files"
output="/path/to/all.pdb"
for file in $(find $filedir -type f -name "file.88_*" | sort -t "_" -k2 -n); do
    cat $file >> $output
done

这样就可以使用sort-k2)第二个字段_作为分隔符来打开文件。在这里,您必须使用>>否则每个新文件都将覆盖最后一个文件。


我仍然收到错误的命令:0 1 10 11 12...
硝酸钠

您在运行什么操作系统?如果您做了sort --version什么,您会得到什么?并且您拥有-nsort命令中的命令吗?
jesse_b

OSX El Capitan,sort (GNU coreutils) 5.93
硝酸钠

1
非常感谢您的尝试!该/dev/null是急需除了对方的回答!
硝酸钠

1
无用的命令替换。使用类似的东西find ... | sort ... | xargs cat >> $output
David Foerster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.