Всякий раз, когда у вас есть пары тег / имя к значению на входе, я считаю наилучшим (самый простой, самый простой, самый надежный, самый простой для улучшения и т. Д.) Сначала создать массив, содержащий это отображение (f[]
ниже) и тогда вы можете просто получить доступ к значениям по их тегам:
$ cat file
geo:FR, host:www.example.com
host:www.example.com, geo:FR
foo:bar, host:www.example.com, stuff:nonsense, badgeo:uhoh, geo:FR, nastygeo:wahwahwah
$ cat tst.awk
BEGIN { FS=":|, *"; OFS="," }
{
for (i=1; i<=NF; i+=2) {
f[$i] = $(i+1)
}
print f["geo"], f["host"]
}
$ awk -f tst.awk file
FR,www.example.com
FR,www.example.com
FR,www.example.com
Вышеописанное будет работать с использованием любого awk в любой оболочке на каждом компьютере UNIX.