我有名为file.88_0.pdb
, file.88_1.pdb
, ...
,的文件file.88_100.pdb
。我想要cat
它们,以便在、之后等等file.88_1.pdb
之后粘贴。如果我这样做,文件将按以下顺序放在一起:等。我如何将它们放在一起以便顺序是?file.88_0.pdb
file.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
cat file.88_{0..100}.pdb >>bigfile.pdb
要忽略打印不存在文件的错误消息,请使用:
cat file.88_{0..100}.pdb >>bigfile.pdb 2>/dev/null
在zsh
shell 中,您还可以使用(n)
globbing 限定符来请求数值排序(与默认的按字母顺序排列的) 对于全局:
cat file.88_*.pdb(n) >>bigfile.pdb 2>/dev/null
答案2
在不带大括号扩展的 shell 中,如果文件名不包含空格、引号或反斜杠,则可以使用ls
(假设是 GNU 实现)+ xargs
:
ls -v file.88_*.pdb | xargs cat > all.pdb
ls
将按数字顺序对文件进行排序:
-v
文本中的(版本)数字的自然排序。
答案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)
答案4
尝试:
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
) 第二个字段用作_
分隔符。这里你必须使用>>
,否则每个新文件都会覆盖上一个。