Связанный с этим вопрос здесь.
У меня есть два файла:
файл 1:
I am a cat
I am a dog
I am a dog
I am a cat
I am a dog
файл 2:
line 1
line 2
При выполнении:
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
Я ожидаю:
line 1
I am a cat
I am a dog
I am a dog
line 2
I am a cat
I am a dog
Мое понимание awk в приведенном выше коде:
Прочитайте строку из файла 1, если cat
существует, напечатайте строку из file 2
, а 1
в конце указывает awk также напечатать строку из file 1
. Если cat
не найдено, awk ничего не печатает из file 2
, но все равно напечатает соответствующую строку из file 1
.
Похоже, что происходит то, что awk читает первую строку file 1
, находит cat
и печатает первую строку из file 2
. Затем awk интерпретирует 1
как истинное для данного условия и снова печатает первую строку из file 2
. Когда awk не находит cat
, он интерпретирует 1
как истину и печатает из file 1
?
Еще кое-что, что мне показалось интересным, это когда я запускаю это:
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
Что тут происходит? Спасибо за ваше время.