Reemplazo del contenido de un archivo desde el nombre del archivo

Reemplazo del contenido de un archivo desde el nombre del archivo

Quiero preparar un script en el que el contenido del archivo cambie con su nombre de archivo.

Supongamos que tengo un nombre de archivo ABC_20161027220153.txty el contenido del archivo es como

2000|2000_ABC|04|||0000000000||

Quiero crear un script en el que se cambie el contenido del archivo como se muestra a continuación.

2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

¿Cómo puedo hacer esto?

Respuesta1

Hubo algunos pasos para esto:

  1. awk conoce el nombre del archivo actual en la variableFILENAME
  2. Si no hemos dividido el nombre del archivo en los elementos decodificados (codificados aquí para realizarse en la primera línea de cada nuevo archivo de entrada), entonces usamos la substrfunción para ayudarnos.
  3. para cada línea de entrada, previamente dividida en |símbolos por la BEGINdeclaración, reemplace los campos 4 y 5 con sus nuevos valores
  4. imprimir la línea reconstruida

Poniéndolo todo junto (lo llamé 'abc.awk'):

BEGIN { OFS=FS="|" }

{
  if (FNR == 1) {
    f4=substr(FILENAME, index(FILENAME, "_") + 1, 8);
    f5a=substr(FILENAME, index(FILENAME, "_") + 9, 6);
    f5=substr(f4, 7, 2) "." substr(f4, 5, 2) "." substr(f4, 1, 4) " " \
        substr(f5a, 1, 2) "." substr(f5a, 3, 2) "." substr(f5a, 5, 2);
  }

  $4=f4
  $5=f5
  print $0
}

$ awk -f abc.awk ABC_20161027220153.txt
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

información relacionada