No akkor ugorgyunk neki megint.
a) a példámat ha jobban megnézed, eleve ciklusban hívtam a cmd | getline formát
b) felnyitottam a bibliát(*), ez áll benne szó szerint:
It is also possible to pipe the output of another command directly into getline. Eg: the statement
while ( "who" | getline )
n++
executes the Unix program who (only once) and pipes its output into getline. The output of who is a list of users logged in. Each iteration of the while loop reads one more line from this list and increments the variable n ..."
c) ha minden getline használat uitán mondasz egy close(cmd) -t, akkor új és új processzeket fog kreálni. Ha ezzel szemben nincs close, akkor az eredeti processz fut és onnan olvas a getline. Amely egyébként EOF esetén 0-t ad vissza, később viszont -1 -et, ami viszont TRUE. Sőt. nemlétező fájlból átirányításkor vagy hibás parancs kimenete esetén is. Erről is ír a biblia, kb ezt:
"Ez a forma hibás:
while ( getline <"file" )
helyette ezt kell írni:
while ( getline < "file" > 0 )
- ugyanis az elsőnél nemlétező fájl esetén jó kis végtelen ciklust kapsz." Fenti példában az a szép, hogy a kisebb jel átirányítás, a nagyobb viszont a relációs operátor - azaz hogy csak addig fusson a while, amíg a getline el nem éri a fájl végét
Azaz tartom magam ahhoz, hogy PEBKAC, és nem gawk hiba. (Én egyébként ezért is tartok (most már) 4-féle awk-t a FreeBSD-men: the one true awk (nawk), gawk, mawk és most már goawk is. Nyilván akkor szívás van, ha építesz a gawk speciális tudására.)
(*) The AWK book by A & W & K