( Zahy | 2020. 04. 03., p – 14:39 )

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