我有一个文件,由于权限问题,我无法进行任何修改。
因此,我只能使用一个工具及其查看选项来可视化文件,该工具将其内容打印到带有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
列file1.txt
,并添加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
offile1.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
如果您的外壳支持它,您也可以使用“进程替换”(bash,ksh和zsh这样做):
$ awk '{ your_program }' <(foo-tool view file1.txt) file2.txt
如果您必须处理几个不同命令的输出,这可能会很有用,例如:
$ awk '{ your_program }' <(foo-tool view file1.txt) <(foo-tool view file2.txt)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句