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

标签 ubuntu awk gawk

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

wc -l file.txt

即:200

第二个数字是通过键入以下内容获得的:
gawk '{print $3}' file.txt | sort | uniq | wc -l

即:20

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

最佳答案

这是计算文件的行数:

wc -l file.txt

这是计算第三列中出现的不同项目的数量:
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)以及不同项目的数量及其划分。这是因为 NREND block normally保存读取的最后一行的编号,因此是行数, 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
    

    关于ubuntu - 如何划分两个不同命令的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397188/

    相关文章:

    ruby-on-rails - Rvm - Linux Ubuntu 上的 Capistrano 集成

    Linux排序和切割除最大值以外的行

    bash - `c&&!--c;`与 `awk`一起使用时的作用

    csv - 使用 awk 按名称获取 CSV 字段

    ubuntu - 带有 Ubuntu 的 Raspberry Pi 4 B 上带有 MCP2515 的 CAN 屏蔽

    java - 尝试在 Ubuntu 15.04 上的 Tomcat8 上部署 WAR 时出错

    r - 为什么我无法在 Ubuntu 上安装最新版本的 R?

    awk - 尝试将转义字符作为变量传递给 awk

    linux - 在这种情况下,在 Linux 中如何从文件中的字符串中提取数据?

    bash - 傻瓜/awk : piping date to getline *sometimes* won't work