archivos cat en orden específico según el número en el nombre del archivo

12

Tengo archivos con el nombre file.88_0.pdb, file.88_1.pdb, ..., file.88_100.pdb. Quiero catque file.88_1.pdbse peguen después file.88_0.pdb, file.88_2.pdbdespués file.88_1.pdb, y así sucesivamente. Si lo hago cat file.88_*.pdb > all.pdb, los archivos se agrupan en el siguiente orden: 0 1 10 11 12 13 14 15 16 17 18 19 2 20...etc. ¿Cómo los reúno para que el orden sea 0 1 2 3 4 5 6...?

nitrato de sodio
fuente
1
Por cierto, es posible que esté interesado en nuestro nuevo sitio de Bioinformática si está trabajando en el campo.
terdon

Respuestas:

24

Utilizar brace expansion

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

Para ignorar la impresión de los mensajes de error para archivos inexistentes, use:

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

En el zshshell también tiene el (n)calificador global para solicitar una clasificación numérica (en oposición al valor predeterminado de alfabético ) para los globos:

cat file.88_*.pdb(n) >>bigfile.pdb 2>/dev/null
αғsнιη
fuente
3
cat $(for((i=0;i<101;i++)); do echo -n "file.88_${i}.pdb "; done)

o, con respecto al comentario de Jesse_b:

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

En shell sin expansión de llaves puede usar ls+ xargs:

ls -v file.88_*.pdb | xargs cat > all.pdb

ls ordenará los archivos en orden numérico:

-v tipo natural de (versión) números dentro del texto.

Alexander Kovalev
fuente
2

Tratar:

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

Esto fue capaz de sortlos archivos en el ( -k2) segundo campo utilizando _como separador. Aquí debe usarlo; de lo >>contrario, cada archivo nuevo sobrescribirá el último.

jesse_b
fuente
Todavía consigo el orden equivocado:0 1 10 11 12...
nitrato de sodio
que estas corriendo si haces sort --versionlo que obtienes? ¿Y tienes -nel comando de clasificación correcto?
jesse_b
OSX El Capitan,sort (GNU coreutils) 5.93
nitrato de sodio
1
Muchas gracias por intentarlo! ¡La /dev/nulladición a la otra respuesta era muy necesaria!
nitrato de sodio
1
Uso inútil de la sustitución de comandos . Use algo como en su find ... | sort ... | xargs cat >> $outputlugar.
David Foerster