( lx | 2015. 02. 09., h – 16:16 )

A getline a meghívás helyén azonnal beolvassa a következő rekordot. Paraméter nélkül a $0-át teszi egyenlővé azzal, de ha kap egy változónevet paraméterként, akkor az adott változó lesz egyenlő a prompt beolvasott rekorddal. A getline végrehajtásával a fájlmutató és a NR/FNR változók ugyanúgy mozognak, mint az automatikus, "végtelen ciklusos" olvasáskor.


awk '

# Ha a mezők száma nem éri el a 3-at, beolvassuk x-be a következő sort*,
# és $0 értékének végére tesszük a pótlólag beolvasott részt.
# Azzal, hogy $0-nak értéket adunk, egyúttal kikényszerítjük, hogy
# az új $0 mezőkre törtdelése is megtörténjék.
# Ha eleve eléri a 3-at a mezők száma, akkor az a rész mintha itt sem volna.

NF < 3 { getline x; $0 = ($0 x) }

# Az első mezőben a mező végén álló architektúranevet
# (a megelőző ponttal együtt) lecseréljük az alábbi
# részekből konkatenált sztringre:
#   1: "-"
#   2: a 2. mező
#   3: az a sztring, amit architektúraként megtaláltunk a reguláris
#      kifejezéssel (a.m.: ".x86_64" vagy ".noarch")
# Ezáltal az első mező értéke az lesz, amit látni szeretnénk,
# már csak ki kell írni.

{ sub(/\.(x86_64|noarch)$/, "-" $2 "&", $1); print $1 }'

* Azzal a feltételezéssel él, hogy egy getline-nal már mindenképpen meglesz a 3 mező. Minimális módodítással elérhető, hogy akkor is működjön a többi rész, ha soronként csak egy mezőt talál, vagy akár üres sort a szabályosnak tekintett, 3-mezős sorok mellett.