es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo eliminar todas las líneas nuevas de todos los archivos .txt de una carpeta, utilizando herramientas UNIX?

Tengo alrededor de 300 archivos (.txt) en una carpeta con texto normal formateado con /n’s. Quiero que todo el texto de estos archivos esté en la primera línea, ya que un programa en mi canalización lo requiere.

Ejemplo:

(IS:)\
GTCGCAGCCG\
TCGGCTCGGA\
TCTCGGCCTC

(DEBERÍA SER:)\
GTCGCAGCCGTCGGCTCGGATCTCGGCCTC

Si pudiera sobrescribirlos todos, manteniendo los nombres de archivo sin cambios, eso sería conveniente. No quiero sacar python todavía, ¿hay una herramienta / enfoque fácil de línea de comando UNIX?

Estuve aquí antes:
https://stackoverflow.com/questions/3134791/how-do-i-remove-newlines-from-a-text-file

Pero, ¿cómo hacer eso para los 300 archivos en mi carpeta? Si uso tr -d '\n' < *.txt me dice: “bash: *.txt: redirección ambigua”.

Tags:  

Answer

  1. Avatar for davy.ai

    Para eliminar los saltos de línea de los 300 archivos .txt en una carpeta utilizando un enfoque de línea de comandos, se puede utilizar una combinación de los comandos find y xargs con el comando tr.

    Aquí hay un ejemplo de comando:

    find /ruta/a/la/carpeta -name "*.txt" -type f -print0 | xargs -0 -I{} sh -c 'tr -d "\n" < "$1" > temp && mv temp "$1"' -- {}
    

    Veamos cómo se descompone:

    • find /ruta/a/la/carpeta -name "*.txt" -type f -print0 – esto encuentra todos los archivos en la carpeta especificada con la extensión .txt y muestra sus nombres, separados por caracteres nulos.
    • | xargs -0 -I{} – esto toma la salida del comando anterior, que está separada por caracteres nulos, y pasa cada nombre de archivo como argumento al siguiente comando.
    • sh -c 'tr -d "\n" < "$1" > temp && mv temp "$1"' -- {} – esto crea un comando shell que toma el nombre del archivo como argumento ($1). Utiliza el comando tr para eliminar los saltos de línea del contenido del archivo y escribe la salida en un archivo temporal llamado temp. Luego, cambia el nombre del archivo temporal al nombre original del archivo, sobrescribiendo efectivamente el archivo original.

    Tenga en cuenta que la opción -- indica a xargs que trate todos los argumentos restantes como nombres de archivo, incluso si comienzan con un guión.

    Este comando debería funcionar con nombres de archivo que contengan espacios, caracteres especiales o saltos de línea.

Comments are closed.