Замена содержимого файла из имени файла

Замена содержимого файла из имени файла

Я хочу подготовить скрипт, в котором содержимое файла меняется вместе с его именем.

Предположим, у меня есть FileName ABC_20161027220153.txtи содержимое файла такое:

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

Я хочу создать скрипт, в котором содержимое файла изменяется, как показано ниже.

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

Как я могу это сделать?

решение1

Для этого нужно было сделать несколько шагов:

  1. awk знает текущее имя файла в переменнойFILENAME
  2. Если мы не разделили имя файла на декодированные элементы (здесь это жестко запрограммировано и должно быть сделано в первой строке каждого нового входного файла), то мы используем функцию, substrчтобы она нам помогла.
  3. для каждой входной строки, ранее разделенной |для нас оператором на символы BEGIN, замените поля 4 и 5 их новыми значениями
  4. распечатать реконструированную строку

Собираем все вместе (я назвал это «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||

Связанный контент