将(匹配)命令输出与文件中的行进行比较

时间:2016-10-10 11:14:19

标签: awk

我将命令的输出传递给awk,我想检查该输出是否与文件行匹配。

我们说我有以下文件:

aaa
bbb
ccc
...etc

然后,让我们说我有一个命令'什么'返回时,我的目标是管道anything | awk来检查该命令的输出是否在文件中匹配(如果它没有,我想将它附加到文件中,但是&#39}不难......)我的问题是我不知道如何同时读取命令输出和文件。

欢迎任何建议

2 个答案:

答案 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。