Cómo agrupar files juntos, agregar líneas nuevas faltantes al final de algunos files

Tengo un montón de files .text, la mayoría de los cuales terminan con el nl estándar.

Una pareja no tiene terminador al final. El último byte físico es (generalmente) un carácter alfanumérico.

Estaba usando cat *.text >| /tmp/joined.text cat *.text >| /tmp/joined.text , pero luego noté un par de lugares en joined.text donde apareció la primera línea de un file al final de la última línea de un file anterior. Al inspeccionar el file anterior, vi que no había un terminador de línea – explicó la concatenación.

Eso planteó la pregunta, ¿cuál es la forma más fácil de concatenar, pegando en la falta de nl?

Opción 1: una solución que podría agregar efectivamente una línea en blanco a algunos files de input. Para mí, eso no es un problema ya que el procesamiento de joined.text puede manejarlo.

Opción 2: una solución que agrega cr / fl solo a los files que aún no terminan de esa manera.

Este útil trazador de líneas Perl puede hacer el trabajo de agregar la nueva línea faltante solo si aún no está allí:

 perl -lpe '' ./*.text > output 

El primer enfoque que se me ocurre es recorrer los files y simplemente imprimir sus contenidos con una nueva línea añadida:

 for f in *text; do printf '%s\n' "$(cat "$f")" done > /tmp/joined.text 

El $() eliminará cualquier carácter de nueva línea ya existente, de modo que esto dará como resultado una sola \n al final de cada file.

Con algunas implementaciones de cut como cut GNU, puede hacer:

 cut -b 1- ./*.text > output 

ya que agregará la nueva línea faltante si falta.