Quero preparar um script no qual o conteúdo do arquivo seja alterado com seu nome de arquivo.
Suponha que eu tenha um FileName ABC_20161027220153.txt
e o conteúdo do arquivo seja como
2000|2000_ABC|04|||0000000000||
Quero fazer um script no qual o conteúdo do arquivo seja alterado como abaixo
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||
Como posso fazer isso?
Responder1
Houve algumas etapas para isso:
- awk conhece o nome do arquivo atual na variável
FILENAME
- se não dividirmos o nome do arquivo nos elementos decodificados (codificados aqui para serem feitos na primeira linha de cada novo arquivo de entrada), então usaremos a
substr
função para nos ajudar. - para cada linha de entrada, previamente dividida em
|
símbolos para nós pelaBEGIN
instrução, substitua os campos 4 e 5 por seus novos valores - imprima a linha reconstruída
Juntando tudo (chamei de '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||