ver varios todos para otro mover los ejemplos directorio crear contenido comandos comando basicos archivos archivo unix header terminal concatenation cat

unix - todos - cat varios archivos pero incluye nombre de archivo como encabezados



mover varios archivos en linux (17)

Me gustaría concatenar una serie de archivos de texto en un archivo grande en la terminal. Sé que puedo hacer esto usando el comando cat. Sin embargo, me gustaría que el nombre de archivo de cada archivo preceda al "volcado de datos" para ese archivo. Alguien sabe cómo hacer esto?

lo que tengo actualmente

file1.txt = bluemoongoodbeer file2.txt = awesomepossum file3.txt = hownowbrowncow cat file1.txt file2.txt file3.txt

salida deseada:

file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow


Aquí es una forma muy simple. Dijiste que querías cat, lo que implica que quieres ver el archivo completo. Pero también necesita el nombre de archivo impreso.

Prueba esto

head -n99999999 * o head -n99999999 file1.txt file2.txt file3.txt

Espero que ayude


Así es como normalmente manejo el formato de esa manera:

for i in *; do echo "$i"; echo ; cat "$i"; echo ; done ;

Generalmente canalizo al gato en un grep para obtener información específica.


Estaba buscando lo mismo, y encontré esto para sugerir:

tail -n +1 file1.txt file2.txt file3.txt

Salida:

==> file1.txt <== <contents of file1.txt> ==> file2.txt <== <contents of file2.txt> ==> file3.txt <== <contents of file3.txt>

Si solo hay un archivo, el encabezado no se imprimirá. Si usa utilidades de GNU, puede usar -v para imprimir siempre un encabezado.


Este método imprimirá el nombre del archivo y luego los contenidos del archivo:

tail -f file1.txt file2.txt

Salida:

==> file1.txt <== contents of file1.txt ... contents of file1.txt ... ==> file2.txt <== contents of file2.txt ... contents of file2.txt ...


Esto debería funcionar:

for filename in file1.txt file2.txt file3.txt; do echo "$filename" cat "$filename" done > output.txt

o hacer esto para todos los archivos de texto recursivamente:

find . -type f -name ''*.txt'' -print | while read filename; do echo "$filename" cat "$filename" done > output.txt


Esto debería hacer el truco también:

find . -type f -print -exec cat {} /;

Medio:

find = linux `find` command finds filenames, see `man find` for more info . = in current directory -type f = only files, not directories -print = show found file -exec = additionally execute another linux command cat = linux `cat` command, see `man cat`, displays file contents {} = placeholder for the currently found filename /; = tell `find` command that it ends now here

Además, puede combinar búsquedas a través de operadores booleanos como -and -or . find -ls es bueno, también.


Me gusta esta opcion

for x in $(ls ./*.php); do echo $x; cat $x | grep -i ''menuItem''; done

La salida se ve así:

./debug-things.php ./Facebook.Pixel.Code.php ./footer.trusted.seller.items.php ./GoogleAnalytics.php ./JivositeCode.php ./Live-Messenger.php ./mPopex.php ./NOTIFICATIONS-box.php ./reviewPopUp_Frame.php $(''#top-nav-scroller-pos-<?=$active**MenuItem**;?>'').addClass(''active''); gotTo**MenuItem**(); ./Reviews-Frames-PopUps.php ./social.media.login.btns.php ./social-side-bar.php ./staticWalletsAlerst.php ./tmp-fix.php ./top-nav-scroller.php $active**MenuItem** = ''0''; $active**MenuItem** = ''1''; $active**MenuItem** = ''2''; $active**MenuItem** = ''3''; ./Waiting-Overlay.php ./Yandex.Metrika.php


Para resolver estas tareas suelo usar el siguiente comando:

$ cat file{1..3}.txt >> result.txt

Es una forma muy conveniente de concatenar archivos si la cantidad de archivos es bastante grande.


Si desea que el resultado tenga el mismo formato que su salida deseada, puede probar:

for file in `ls file{1..3}.txt`; / do echo $file | cut -d ''.'' -f 1; / cat $file ; done;

Resultado:

file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow

Puede colocar echo -e antes y después del corte para que tenga el espacio entre las líneas también:

$ for file in `ls file{1..3}.txt`; do echo $file | cut -d ''.'' -f 1; echo -e; cat $file; echo -e ; done;

Resultado:

file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow


Si quieres reemplazar esos feos ==> <== con otra cosa

tail -n +1 *.txt | sed -e ''s/==>//n###/g'' -e ''s/<==/###/g'' >> "files.txt"

explicación:

tail -n +1 *.txt : genera todos los archivos en la carpeta con encabezado

sed -e ''s/==>//n###/g'' -e ''s/<==/###/g'' - replace ==> con nueva línea + ### y <== con sólo ###

>> "files.txt" - >> "files.txt" todo a un archivo


Si te gustan los colores, prueba esto:

for i in *; do echo; echo $''/e[33;1m''$i$''/e[0m''; cat $i; done | less -R

o:

tail -n +1 * | grep -e $ -e ''==.*''

o: (con el paquete ''multitail'' instalado)

multitail *


Tenía una serie de archivos que terminaban en stats.txt que quería concatenar con los nombres de archivo.

Hice lo siguiente y cuando hay más de un archivo, el comando "más" incluye el nombre del archivo como encabezado.

more *stats.txt > stats.txt

o para un caso general

more FILES_TO_CONCAT > OUTPUT_FILE


Usé grep para algo similar:

grep "" *.txt

No le da un ''encabezado'', sino que prefija cada línea con el nombre del archivo.


puedes usar este simple comando en lugar de usar un bucle for,

ls -ltr | awk ''{print $9}'' | xargs head


find . -type f -exec cat {} /; -print


find . -type f -print0 | xargs -0 -I % sh -c ''echo %; cat %''

Esto imprimirá el nombre completo del archivo (incluida la ruta), y luego el contenido del archivo. También es muy flexible, ya que puede usar -name "expr" para el comando de búsqueda y ejecutar tantos comandos como desee en los archivos.


  • AIX 7.1 ksh

... pegándonos a quienes ya han mencionado que Head trabaja para algunos de nosotros:

$ r head head file*.txt ==> file1.txt <== xxx 111 ==> file2.txt <== yyy 222 nyuk nyuk nyuk ==> file3.txt <== zzz $

Mi necesidad es leer la primera línea; como se indicó, si desea más de 10 líneas, deberá agregar opciones (encabezado -9999, etc.).

Perdón por publicar un comentario derivado; No tengo suficientes credenciales para comentar / agregar al comentario de alguien.