Если ваш исходный файл имеет 3 поля, а ваши файлы данных (например, al_or2.cap
и т. Д.) Имеют 4 поля, вы можете использовать один вызов awk
и встроенные функции tolower
, sprintf
, getline
и split
, чтобы сформировать имя файла, прочитать соответствующий файл и вывести результаты в желаемом порядке следующим образом:
awk '
{ lwr = tolower($3)
str = sprintf ("al_%s.cap", lwr)
while (getline line < str > 0) {
split (line, a, " ", seps)
if (a[1] == $2)
print $1,a[4]
}
}' file
Присутствующие файлы
$ cat file
G22822 277 OR2
G22822 329 OR9
G22940 286 OR3
G22940 412 OR7
G25365 289 OR3
$ cat al_or2.cap
277 ASCII GRP 184578924
102 ASCII GRP 754815923
$ cat al_or9.cap
981 ASCII GRP 542189353
329 ASCII GRP 158203981
Пример использования / Вывод
$ awk '
> { lwr = tolower($3)
> str = sprintf ("al_%s.cap", lwr)
> while (getline line < str > 0) {
> split (line, a, " ", seps)
> if (a[1] == $2)
> print $1,a[4]
> }
> }' file
G22822 184578924
G22822 158203981
Создание простого awk
сценария
Если вы хотите создатьawk-script
из вышеперечисленного, вы можете сделать следующее:
#!/usr/bin/awk -f
{
lwr = tolower($3)
str = sprintf ("al_%s.cap", lwr)
while (getline line < str > 0) {
split (line, a, " ", seps)
if (a[1] == $2)
print $1,a[4]
}
}
Теперь все, что вам нужно сделать, это сохранить файл и сделать его исполняемым (например, chmod +x myscript.awk
, а затем
Пример использования / Вывод
$ ./myscript.awk file
G22822 184578924
G22822 158203981