Substituindo o conteúdo de um arquivo do nome do arquivo

0

Eu quero preparar um script no qual o conteúdo do arquivo seja alterado com o nome do arquivo.

Suponha que eu tenha um nome de arquivo ABC_20161027220153.txt e o conteúdo do arquivo seja

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

Eu quero fazer um script em que 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?

    
por ABC 28.10.2016 / 16:17

1 resposta

1

Houve alguns passos para isso:

  1. o awk sabe o nome do arquivo atual na variável FILENAME
  2. se não dividimos o nome do arquivo nos elementos decodificados (codificados para serem feitos na primeira linha de cada novo arquivo de entrada), usamos a função substr para nos ajudar.
  3. para cada linha de entrada, dividida anteriormente nos símbolos | para nós pela instrução BEGIN , substitua os campos 4 e 5 pelos novos valores
  4. imprima a linha reconstruída

Colocando tudo junto (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||
    
por 02.11.2016 / 15:33