AWK是如何发生UNIX命令作为参数的结果?(how awk takes the result of

2019-09-17 16:42发布

说存在与分隔字段选项卡的输入文件,第一个字段是整数

1 abc
1 def
1 ghi
1 lalala
1 heyhey
2 ahb
2 bbh
3 chch
3 chchch
3 oiohho
3 nonon
3 halal
3 whatever

首先,我需要计算在第一场中唯一值的数量,这将是:

5 for 1, 2 for 2, and 6 for 3

然后,我需要找到这些计数的最大值,在这种情况下,它是6。

现在,我需要通过“6”到另一个awk脚本作为parmeter。

我知道我可以使用下面的命令来获取计数的列表:

cut -f1 input.txt | sort | uniq -c | awk -F ' ' '{print $1}' | sort 

但我如何得到第一次开始计数,并把它传递给下一个awk命令的参数,而不是作为一个输入文件?

Answer 1:

这AWK脚本替换你的整个管道:

awk -v parameter="$(awk '{a[$1]++} END {for (i in a) {if (a[i] > max) {max = a[i]}}; print max}' inputfile)" '{print parameter}' otherfile

其中'{print parameter}'是你的另一个AWK脚本替身和“otherfile”是该脚本的输入。

注:这是有可能这两个AWK脚本可以合并成一个这将是比的方式做,如在你的问题(概述少一个黑客awk喂养awk )。



Answer 2:

这是没有什么很具体的awk的。

无论是程序可以从标准输入读取,那么你可以通过用管道输入:

prg1 | prg2 

或者你的程序要求输入的参数,然后使用

prg2 $(prg1) 

请注意,在PRG 1是PRG 2​​之前处理这两种情况。

有些程序允许这两种可能性,而大量的数据作为参数传递很少。



Answer 3:

您可以使用shell的$()命令替换:

awk -f script -v num=$(cut -f1 input.txt | sort | uniq -c | awk -F ' ' '{print $1}' | sort | tail -1) < input_file

(I加tail -1 ,以确保至多一个行被使用。)



文章来源: how awk takes the result of a unix command as a parameter?
标签: bash shell awk