Использование -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
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
как работают массивы.