Verwandte Frage ist here.awk Anfänger versucht zu verstehen awk "Denkprozess"
Ich habe zwei Dateien:
Datei 1:
I am a cat
I am a dog
I am a dog
I am a cat
I am a dog
Datei 2:
line 1
line 2
Nach Ausführung:
awk '/cat/{getline <"file2"; print};1' file1
line 1
line 1
I am a dog
I am a dog
line 2
line 2
I am a dog
Ich erwarte:
line 1
I am a cat
I am a dog
I am a dog
line 2
I am a cat
I am a dog
Mein Verständnis von awk im obigen Code:
liest Zeile aus der Datei 1, wenn cat
Druckzeile von file 2
und die 1
am Ende awk existiert erzählt auch die Linie von file 1
zu drucken. Wenn cat
nicht gefunden wird, druckt awk nichts aus file 2
, aber druckt immer noch die entsprechende Zeile aus file 1
.
Was scheint zu geschehen ist awk liest die erste Zeile von file 1
, findet cat
und druckt die erste Zeile von file 2
. Dann spreizt awk die 1
als eine der angegebenen Bedingung und druckt erneut die erste Zeile aus file 2
. Wenn awk cat
nicht findet, interagiert das 1
als ein wahres und druckt von file 1
?
Etwas anderes ich interessant fand, ist, wenn ich dies auszuführen:
awk '/cat/{getline this<"file2"; print this};1' file1
line 1
I am a cat
I am a dog
I am a dog
line 2
I am a cat
I am a dog
Was ist hier los? Vielen Dank für Ihre Zeit.
Hoffentlich ist dies eine akademische Frage und Sie erwägen nicht, irgendwelche der Skripte in Ihrer Frage zu verwenden. Wenn Sie dann http://awk.freeshell.org/AllAboutGetline sehen. –
Danke für die Info @Ed Morton. Nicht wirklich für irgendetwas zu verwenden, nur zu lernen. – thecomebackid