【问题标题】:Adding rows in awk-output在 awk 输出中添加行
【发布时间】:2020-07-11 01:58:19
【问题描述】:

我正在使用awk 编写一个bash 脚本,该脚本输出出现在名为output.txt 的文本文件中的400 - 500 范围内的错误代码计数

awk '($9 >= 400)' output.txt | awk '{print $9}' | sort | uniq -c

上面的输出是:

  12 400
  11 401
  55 403
  91 404
  41 500

如何使用 bash 将第一列添加在一起,以便在上面的示例中,我得到 210 而不是上面的输出... (12 + 11 + 55 + 91 + 41 = 210)

如果我想通过命令行参数而不是output.txt 输入文件,我应该如何编辑脚本?我知道您使用 '$1' 和 '$2' 来访问命令行参数,但在这种情况下,考虑到我已经在使用 $9awk,它会如何工作

【问题讨论】:

  • 请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。
  • 当您说“连接”时,ITYM“添加”。当你连接 36 时,你会得到 36,当你添加 36 时,你会得到 9
  • 编辑谢谢!更改连接以添加

标签: bash awk scripting


【解决方案1】:

由于您已经使用了 1 个命令,因此要立即解决您的问题,可以尝试 as(尽管我很确定您是否可以分享您的输入样本,我们也可以在单个命令中完成):

your_command | awk '{sum+=$1} END{print sum}'

同样在 OP 的命令部分 awk '($9 >= 400)' output.txt | awk '{print $9}' 可以缩短为 awk '($9 >= 400){print $9}' output.txt

【讨论】:

  • 而整个管道可以是:awk '$9 > 400 {sum++} END {print sum}' output.txt
  • @glennjackman,对不起,先生,我很抱歉,我不太明白。我可以请您编辑我的答案以便更好地理解。
  • 嗨@RavinderSingh13 你将如何更新脚本,以便它可以从命令行参数而不是output.txt 读取。所以我想这样称呼它./statuscode.sh output.txt
  • @sgeza,改变你的脚本,比如var="$1",在你的命令中你提到output.txt 现在把"$var" 放在它的位置。让我知道它是怎么回事。
【解决方案2】:

假设每个错误代码都在 $9 中,要获取 the count of error codes ranging from 400 - 500 that appear in a text file called output.txt

awk '($9 >= 400) && ($9 <= 500) && !seen[$9]++{cnt++} END{print cnt+0}' output.txt

假设每个错误代码都在 $9 中,要获取 the count of **lines containing** error codes ranging from 400 - 500 that appear in a text file called output.txt

awk '($9 >= 400) && ($9 <= 500){cnt++} END{print cnt+0}' output.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多