我将命令的输出传递给awk,我想检查该输出是否与文件行匹配。
我们说我有以下文件:
aaa
bbb
ccc
...etc
然后,让我们说我有一个命令'什么'返回时,我的目标是管道anything | awk
来检查该命令的输出是否在文件中匹配(如果它没有,我想将它附加到文件中,但是&#39}不难......)我的问题是我不知道如何同时读取命令输出和文件。
欢迎任何建议
答案 0 :(得分:1)
我的问题是我不知道如何同时读取命令输出和文件。
使用-
表示awk阅读文件列表中的标准输入:
$ cat file
aaa
bbb
ccc
$ echo xyz | awk '{print}' - file
xyz
aaa
bbb
ccc
修改强>
分别处理每个输入源有多种选择:
使用FILENAME
:
$ echo xyz | awk 'FILENAME=="-" {print "Command output: " $0} FILENAME=="input.txt" {print "from file: " $0}' - input.txt
Command output: xyz
from file: aaa
from file: bbb
from file: ccc
使用ARGIND
(仅限gawk):
$ echo xyz | awk 'ARGIND==1 {print "Command output: " $0} ARGIND==2 {print "from file: " $0}' - input.txt
Command output: xyz
from file: aaa
from file: bbb
from file: ccc
当只有两个文件时,通常会看到NR==FNR
成语。见副标题"双文件处理"在这里:http://backreference.org/2010/02/10/idiomatic-awk/
$ echo xyz | awk 'FNR==NR {print "Command output: " $0; next} {print "from file: " $0}' - input.txt
Command output: xyz
from file: aaa
from file: bbb
from file: ccc
答案 1 :(得分:0)
command | awk 'script' file -
-
代表stdin。如果合适,交换参数的顺序。阅读Arnold Robbins的有效Awk编程,第4版,学习如何使用awk。