我想用ubuntu终端划分两个值,但第一个数字是做的结果:
wc -l file.txt
即:200
第二个数字是通过键入:
获得的gawk '{print $3}' file.txt | sort | uniq | wc -l
即:20
如何划分这两个数字(不使用数值,而是使用代码?)
答案 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
)以及不同项目的数量及其划分。这是因为NR
块normally中的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