使用标准输出作为awk中的输入

使用标准输出作为awk中的输入,awk,stdout,Awk,Stdout,我有一个文件,由于权限问题,我无法进行任何修改 因此,我只能使用工具及其视图选项来可视化文件,该工具及其视图选项将其内容打印到带有8个制表符分隔列的标准输出: foo-tool view file1.txt ALICE . CANDY 1990 . 76 76 78 MARK . CARAMEL 1991 . 45 88 88 CLAIRE . SALTY XXX . 77 82 12 我确实有另一个文件,我想将它的1st、6th和7th列与file1.txt的1s

我有一个文件,由于权限问题,我无法进行任何修改

因此,我只能使用工具及其视图选项来可视化文件,该工具及其视图选项将其内容打印到带有8个制表符分隔列的标准输出:

foo-tool view file1.txt
ALICE  .  CANDY   1990  . 76 76 78
MARK   .  CARAMEL 1991  . 45 88 88
CLAIRE .  SALTY   XXX   . 77 82 12
我确实有另一个文件,我想将它的
1st、6th和7th
列与
file1.txt
1st、6th和7th
列进行比较,并将
file1.txt
3th和4th
列添加到
file2.txt
,以防这些列中有任何匹配

file2.txt
ALICE  .  CANDY   1990  . 76 76 97
MARK   .  CARAMEL 1991  . 45 88 87
BLAINE .  SALTY   XXX   . 77 82 10
如果我能够打开
file1.txt
,而不仅仅是标准输出,我会:

awk 'NR==FNR { a[$1,$6,$7] = $0; next }($1,$6,$7) in a { print a[$1,$6,$7], $3, $4 }' file1.txt file2.txt
因此,输出将是:

ALICE  .  CANDY 1990  . 76 76 78 CANDY    1990
MARK   .  54    1991  . 45 88 88 CARAMEL  1991
但是,由于我无法将
file1.txt的
标准输出
用作文件,因此我一直在思考如何继续。 我试图打开它并引导其标准输出,但它不起作用:

foo-tool view file1.txt | awk 'NR==FNR { a[$1,$6,$7] = $0; next }($1,$6,$7) in a { print a[$1,$6,$7], $3, $4 }' ARG[$1] file2.txt 
如何在awk中将标准输出作为文件输入作为文件之一传递?

-
”(破折号)是一个特殊的文件名,表示标准输入。此约定用于许多Unix工具,尤其是
awk

然后,您的命令行必须是:

$ foo-tool view file1.txt | awk '{ your_program }' - file2.txt
或者,如果您的系统支持(Linux支持),您可以使用
/dev/stdin
文件:

$ foo-tool view file1.txt | awk '{ your_program }' /dev/stdin file2.txt
如果shell支持“进程替换”(bash、ksh和zsh-do),也可以使用它:

$awk'{your_program}'
$ awk '{ your_program }' <(foo-tool view file1.txt) file2.txt
$ awk '{ your_program }' <(foo-tool view file1.txt) <(foo-tool view file2.txt)