У меня возникли трудности при работе с файлом журнала с помощью awk и сценария оболочки

Использование -t '_' -k2с sortзаставит sortрассматривать ввод как разделенный символом _, а не пробелами, а затем сортировать по второму полю (, которое начинается либо с highилиlow):

$ sort -t '_' -k2 file
March_high 12 63
Jan_high 32 123
Febr_high 87 99
Febr_low 19 139
Jan_low 36 18
March_low 83 77

В качестве примера возьмем первую строку ввода:

Jan_high 32 123
^^^ ^^^^^^^^^^^
f1  field2
1
17.10.2019, 16:25
1 ответ
awk -F',' '{
  if (FNR==NR){
    a[$1"@"$3]=$4","$5","$2
  }
  else if ($1"@"$3 in a){
    print $1","$3","a[$1"@"$3]" ~ "$2","$3","$4","$5
  }
}' file1 file2

При обработке первого файла(FNR==NRозначает, что входной номер записи текущего файла равен общему количеству записей, т.е. обрабатывается первый файл ), сохранить строку, содержащую четвертое, пятое и второе поле в массиве aс первым и третьим полем в сочетании с @в качестве индекса.

Когда обрабатывается второй файл(else if)и в массиве существует комбинированный ключ первого и третьего полей вашей текущей строки, напечатайте первое и третье поля, сохраненное значение массива, тильду и поля 2 -5 из текущая строка.

Ваш вопрос выглядит как "домашнее задание", и я настоятельно рекомендую вам попробовать его самостоятельно, если вы хотите понять, awkкак работают массивы.

0
27.01.2020, 23:59

Теги

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