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

时间:2018-10-21 11:05:05

标签: 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 and 7th列与1st,6th and 7th的{​​{1}}列进行比较,并添加file1.txt的{​​{1}}列如果这些列中有任何匹配项,则将其设置为3rd and 4th

file1.txt

如果我能够打开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 用作文件,因此我对如何进行操作感到困惑。 我试图打开它并定向其标准输出,但是它不起作用:

standard output

如何将标准输出作为awk中的文件输入作为文件之一传递?

1 个答案:

答案 0 :(得分:2)

rm -rf /httpdocs cp -r /deployed-site/public/ /httpdocs/ ”(破折号)是一种特殊的文件名,表示标准输入。许多Unix工具都使用了这个约定,尤其是-

然后您的命令行必须是:

awk

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

/dev/stdin

如果您的外壳支持它,您也可以使用“进程替换”(bash,ksh和zsh可以这样做):

$ foo-tool view file1.txt | awk '{ your_program }' /dev/stdin file2.txt

如果您必须处理几个不同命令的输出,这可能会很有用,例如:

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