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.txt
y 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:
- awk conoce el nombre del archivo actual en la variable
FILENAME
- 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
substr
función para ayudarnos. - para cada línea de entrada, previamente dividida en
|
símbolos por laBEGIN
declaración, reemplace los campos 4 y 5 con sus nuevos valores - 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||