说存在与分隔字段选项卡的输入文件,第一个字段是整数
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命令的参数,而不是作为一个输入文件?
这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
)。
这是没有什么很具体的awk的。
无论是程序可以从标准输入读取,那么你可以通过用管道输入:
prg1 | prg2
或者你的程序要求输入的参数,然后使用
prg2 $(prg1)
请注意,在PRG 1是PRG 2之前处理这两种情况。
有些程序允许这两种可能性,而大量的数据作为参数传递很少。
您可以使用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
,以确保至多一个行被使用。)