подмена процесса bash временным файлом

Здесь было несколько шагов:

  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||
9
15.03.2016, 00:19
1 ответ

На основе комментария Меуха; очевидно, что строки bash можно использовать как временные файлы, попробуйте следующее:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''
3
27.01.2020, 20:08

Теги

Похожие вопросы