【发布时间】:2016-07-29 06:40:58
【问题描述】:
相关问题是here。
我有两个文件:
文件 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 插入为 true 并从 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
这里发生了什么?感谢您的宝贵时间。
【问题讨论】:
-
希望这是一个学术问题,您并没有考虑在您的问题中实际使用任何脚本。如果是,请参阅awk.freeshell.org/AllAboutGetline。
-
感谢@Ed Morton 提供的信息。没有真正将它用于任何事情,只是学习。