这实际上就是我想要的命令,除了我想在第三列中打印使用shell命令的特殊东西(或者更多awk命令我猜,但我不知道我会如何适应原来的awk语句)。我需要帮助的是print命令中$ 2和ar [$ 4,$ 1]之间的伪命令替换,但为了特殊性而将剩下的部分留下。在必须访问awk命令的awk脚本中使用shell命令
awk 'NR==FNR{ar[$3,$2]=$1+ar[$3,$2]; }
NR>FNR && ar[$4,$1] {print "hs"$1,$2,`awk '$1 == #$1 from outer awk command# file2 | tail -n 1 | awk '{print $3}'`, ar[$4,$1]}' file1 file2
文件1的样子
5 8 t11
15 7 t12
3 7 t14
文件2的样子
8 4520 5560 t11
8 5560 6610 t12
8 6610 7400 t13
7 9350 10610 t11
7 10610 11770 t12
7 11770 14627 t13
7 14627 16789 t14
和输出应该像
8 4520 7400 5
7 10610 16789 15
7 14647 16789 3
的感谢!
你在考虑这个错误。 Awk是一个操纵文本的工具。它不是调用工具(包括其他awk实例)的环境 - 这就是shell的用途。 [编辑]你的问题描述你想对你的输入做什么来创建你的输出(而不是**你认为你需要做什么),所以我们可以帮助你。 –
我不明白'ar [$ 4,$ 1]'可以如何返回示例输出最后一列的值。对于这个问题,我没有看到输入中的任何内容可能会产生'5'和'15'的值。所以,正如EdM所说,让我们看看关于如何处理数据的一些规则。您几乎可以肯定地在awk中实现您的所需结果,或者重构您的shell代码以及它如何调用awk。 **请更新您的Q **。祝你好运。 – shellter
@shelter,'5'和'15'来自_file1_。 – agc