Se fossi io a farlo, userei sed:
sed -e '$s/$/\n/' -s *.txt > finalfile.txt
In questo modello sed $ ha due significati, in primo luogo corrisponde solo al numero dell'ultima riga (come un intervallo di righe su cui applicare un modello) e in secondo luogo corrisponde alla fine della riga nel modello di sostituzione.
Se la tua versione di sed non ha -s
(elabora i file di input separatamente) puoi fare tutto come un ciclo però:
for f in *.txt ; do sed -e '$s/$/\n/' $f ; done > finalfile.txt
Puoi fare:
for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done
Assicurati che il file finalfile.txt
non esiste prima di eseguire il comando precedente.
Se sei autorizzato a usare awk
puoi fare:
awk 'FNR==1{print ""}1' *.txt > finalfile.txt
Se disponi di un numero sufficiente di file da poter elencare ciascuno di essi, puoi utilizzare la sostituzione del processo in Bash, inserendo una nuova riga tra ogni coppia di file:
cat File1.txt <(echo) File2.txt <(echo) File3.txt > finalfile.txt