Reemplace las nuevas líneas char (^M) en todos los archivos y luego cambie el nombre del archivo según la cadena de caracteres

Reemplace las nuevas líneas char (^M) en todos los archivos y luego cambie el nombre del archivo según la cadena de caracteres

No soy un experto en UNIX, pero entiendo lo suficiente como para crear pequeños scripts aquí y allá, excepto en este, al que personalmente no puedo dedicar suficiente tiempo.

Tengo alrededor de 2000 archivos en un directorio en el que se debe hacer lo siguiente:

  1. Cada archivo tiene alrededor de 3000 registros, pero todos están en una línea de cada archivo separados por el carácter de nueva línea Ctrl M. Es necesario separarlos.
  2. Cada archivo tiene la fecha correspondiente en la que se generó en la primera línea, comenzando desde el octavo carácter hasta el decimocuarto carácter. Esta fecha debe usarse para cambiar el nombre del archivo a XXX_AAAAMMDD_AAA.txt

Respuesta1

La mayoría de los sistemas incluyen una herramienta llamada dos2unixque puede "iniciar" en un script para procesar los archivos que necesita para realizar esta operación.

Si todos los archivos están en un directorio, puede usarlos findpara ubicarlos y luego operar en cada uno individualmente de esta manera:

$ find . -type f -exec dos2unix {} +

Ejemplo

Digamos que tenía esta estructura de directorios

$ tree
.
|-- afile
|-- dir1
|   `-- afile
`-- dir2
    `-- afile

Podemos utilizar nuestra findtécnica para confirmar que todos los archivos son archivos "DOS" con la terminación de línea CRLF.

$ find . -type f -exec file {} +
./dir2/afile: ASCII text, with CRLF line terminators
./afile:      ASCII text, with CRLF line terminators
./dir1/afile: ASCII text, with CRLF line terminators

Y repara todo así:

$ find . -type f -exec dos2unix {} +
dos2unix: converting file ./dir2/afile to Unix format ...
dos2unix: converting file ./afile to Unix format ...
dos2unix: converting file ./dir1/afile to Unix format ...

Resultando en solo archivos Unix:

$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile:      ASCII text
./dir1/afile: ASCII text

información relacionada