2009-10-31 12 views

Respuesta

10

uso awk

awk 'FNR==1{print ""}{print}' file* > out.txt 
+0

recursividad repugnante. Pero esto funciona: awk 'FNR == 1 {print ""} {print}' * .txt> /tmp/out.txt – Matt

+0

¿qué quieres decir repulsión desagradable.? – ghostdog74

+1

Si ejecuto esa línea solo, el comando nunca se cierra y sigue agregando los archivos al archivo out.txt (que está en la misma carpeta de los archivos que estoy recibiendo) Out.txt se vuelve muy grande, muy rápido. (De nuevo, OSX 10.5.8 YRMV). – Matt

-2

echo "" > blank.txt
cat f1.txt blank.txt f2.txt blank.txt f3.txt

para manejar todos los archivos en un directorio (ksh asumiendo como Shell)

for file in * ; do
   cat $file >> result.txt
   echo "" >> result.txt
done

+0

Eso no se ocupa de todos los archivos en el directorio a menos que hagan una lista de forma manual como parámetros. –

+0

ten cuidado si gatas así con un bucle for expandiendo todo. $ file podría ser un directorio y estarás atrapando un directorio. – ghostdog74

2

Es posible que desee ver pr(1), que puede hacer lo que quiera desde el primer momento.

para rodar su propio, expanda este fragmento de secuencia de comandos shell POSIX:

ls -1 | while read f; do cat "$f"; echo This is a spacer line; done > /tmp/outputfile 

Esto podría más legible puede escribir como:

ls -1 | while read f; do 
    cat "$f" 
    echo This is a spacer line 
done > /tmp/outputfile 

Usted realmente no necesita el -1 para ls.

+0

¡Gracias! Solo recuerda redirigir la salida a otro directorio (como en la solución awk). – Matt

+0

Roger, actualizado. – DigitalRoss

9

Trate

find . -type f -exec cat {} \; -exec echo "-- spacer --" \; 

Obviamente, el 'espaciador' puede ser más que el ejemplo simple que se usa aquí.

+0

Funciona, pero no puedo usar "\ n" como mi separador, solo usa un literal '\ n'? – Matt

+0

Simplemente use 'echo" "' para una línea en blanco. Debería haber dicho que el espaciador podría ser más * o menos * que el ejemplo. – pavium

+0

'echo" "' no funciona en OS X? – Matt

-1

Creo que la forma más simple está utilizando el comando paste:

paste $(ls *) > file.out 
+0

Um, no, esto simplemente no funciona. Paste hace algo similar pero diferente a lo que hizo la pregunta. Entrelaza los archivos. – Caleb

Cuestiones relacionadas