如何划分两个不同命令的输出?

时间:2016-11-03 08:51:54

标签: ubuntu awk gawk

我想用ubuntu终端划分两个值,但第一个数字是做的结果:

wc -l file.txt

即:200

第二个数字是通过键入:

获得的
gawk '{print $3}' file.txt | sort | uniq | wc -l

即:20

如何划分这两个数字(不使用数值,而是使用代码?)

2 个答案:

答案 0 :(得分:2)

这是计算文件的行:

wc -l file.txt

这是计算第3列中出现的不同项目的数量:

gawk '{print $3}' file.txt | sort | uniq | wc -l

所有这些都是awk可以轻松完成的事情:

awk '{uniq[$3]} END{print NR, length(uniq), NR/length(uniq)}' file.txt

那是:

  • {uniq[$3]}
    跟踪第3栏中出现的项目

  • END{print NR, length(uniq), NR/length(uniq)}
    打印行数(NR)以及不同项目的数量及其划分。这是因为NRnormally中的END包含读取的最后一行的编号,因此包含行数,而length()是一个返回的函数数组中的项目数。

测试

$ cat a
1
2
3
1
2
3
$ awk '{uniq[$1]} END{print NR, length(uniq), NR/length(uniq)}' a
6 3 2
$ awk '{uniq[$1]} END{printf "lines: %d; different items: %d; proportion: %f\n", NR, length(uniq), NR/length(uniq)}' a
lines: 6; different items: 3; proportion: 2.000000

答案 1 :(得分:0)

你可以试试这个;

Intent

echo $(($(wc -l file.txt)  / $(gawk '{print $3}' file.txt | sort | uniq | wc -l)))

echo $(wc -l file.txt)/$(gawk '{print $3}' file.txt | sort | uniq | wc -l) | bc