El 29 de septiembre de 2015, 10:57, Jorge A. Secreto <jorgesecr...@gmail.com
> escribió:

>
>
> El 29 de septiembre de 2015, 10:00, fernando sainz <
> fernandojose.sa...@gmail.com> escribió:
>
>> El día 29 de septiembre de 2015, 14:45, Jorge A. Secreto
>> <jorgesecr...@gmail.com> escribió:
>> > Hola gente!
>> > Disculpen que consulte por esta pavada, pero estuve leyendo el man de
>> awk,
>> > el de sed, el de bash, busqué en google 'numerar archivos linea comando
>> > linux' y cosas por el estilo y nada me sacó de mi ignorancia :-(
>> > Tengo algunos miles de archivos de texto que tengo que concatenar en
>> orden.
>> > Están numerados con el orden que debo respetar al comienzo del nombre,
>> por
>> > ej '1 xxx.txt' '2 xxx.txt' etc.
>> > El problema se me presenta cuando los uno con 'cat -s *.txt >
>> unidos.txt',
>> > porque el orden que usa cat para leerlos es alfabético en vez del orden
>> > natural numérico, como haría 'ls -v', es decir, ordena '100 ''10 ''1 '
>> en
>> > vez de '1 ''10 ''100 ', que es lo que necesito.
>> > Podría armar algún programa, en alto nivel, para hacerlo, pero me parece
>> > exagerado, creo que se tiene que poder hacer desde la línea de comando.
>> > Si álguien de la lista fuera tan amable como para desasnarme, habría
>> subido
>> > un peldañito más en su camino al cielo.
>> > Gracias y, nuevamente, disculpen que moleste.
>>
>>
>> Así sin pensarlo mucho se me ocurre que esto te puede funcionar:
>>
>>    cat `ls *kk | sort -n`
>> o
>>    cat $(ls *kk | sort -n)
>>
>> S2.
>>
>> Hola  Fernando, Manolo muchas gracias por contestar.
>


>
> Cat no se lleva bien con la sustitucion de la entrada.  :-P
>
> $ cat `ls -v *.txt` > pepe
> cat: opción inválida -- '.'
>
> $ cat -- `ls -v *.txt` > pepe
> cat: 01: No existe el fichero o el directorio
>
> $ ls -v *.txt|cat -
> Devuelve la lista de archivos porque lo toma como una entrada de texto
>
> por eso se me ocurrió que podría haber alguna forma de renombrarlos
> poniendo, por ej, los números como 000001, 000002...000010...000100, que
> solucionaría lo del ordenamiento natural y a partir de ahi sólo queda
> concatenarlos.
>
> Gracias nuevamente.
>
>
>
> Hola  Fernando, Manolo, Camaleon, Pablo muchas gracias por contestar.
Camaleon
sort -g *.txt > ordenados.txt
genera un archivo con los renglones de todos los archivos de orígen
preciosamente en orden alfabético. :-D

Pablo
for num in $(seq 1 1000)
do
    cat $num_xxxx.txt >> consolidado.txt
done
funcionaría (y me gustó la idea), pero los archivos los nombran de acuerdo
a como sopla el viento, algunos empieza con un cero adelante, pero no todos
:-(

Manolo
Como le decía a Pablo los archivos tiene de todo en el nombre, espacios,
guiones, acentos, puntos, lo único que respetan, me parece, es que terminan
en txt.
Y yo soy bastante chambón con los comandos y sus parámetros, redirecciones,
tuberías y esas cosas. Como te podrás haber dado cuenta :-(

La solución que me sirvió:

Finalmente encontré las palabras claves correctas para la búsqueda :-P

http://unix.stackexchange.com/questions/51950/sed-extending-a-string-of-numbers-to-a-certain-number-of-digits-by-padding-with

http://www.linux-party.com/index.php/35-linux/8923-renombrar-multiples-ficheros-quitar-espacios-cambiar-mayusculas-a-la-vez-en-linux

Haciendo un batido de las dos páginas pude armar

for FILE in *.txt ; do NEWFILE=`echo $FILE | sed -r -e 's/[0-9]/0000000&/'
-e 's/0*([0-9]{8}[^0-9])/\1/' -e 's/- / /g' -e 's/ /_/g'`; cp -T "$FILE"
numerados/$NEWFILE  ; done

que hizo lo que necesitaba

Nuevamente muchas gracias a todos.

-- 
Jorge A Secreto
Analista de Sistemas
MP 361

Responder a