【问题标题】:use awk to calculate percentage of column 1 derived from column 2 and add it to column 3使用 awk 计算从第 2 列派生的第 1 列的百分比并将其添加到第 3 列
【发布时间】:2014-11-08 17:32:26
【问题描述】:

我有一个由 2 列组成的文件,它们都只包含整数。我希望 awk 添加第三列,显示第 1 列的百分比,从第 2 列派生。

因此,例如,第 1 列显示:

cat file
15      150

我希望 awk 添加第 3 列以显示10(因为1515010%,对吧?)像这样:

15      150     10

各列由制表符分隔。

感谢您的帮助!

【问题讨论】:

  • 请显示一些示例文件和一些示例所需的输出。此外,当您使用awk 标记时,您可能已经写了一些东西。分享它,以便我们了解您对解决方案的了解程度。
  • 这是简单的数学和简单的计算。你做了什么来解决这个问题?

标签: awk percentage calculated-columns


【解决方案1】:

另一个 awk

awk '$3=100*$1/$2' file

覆盖文件

awk '$3=100*$1/$2' file > tmp && mv tmp file

如果由于某种原因您的文件中有 0

awk '$2>0{$3=100*$1/$2}1' file > tmp && mv tmp file

awk '$2>0&&$3=100*$1/$2' file > tmp && mv tmp file

【讨论】:

  • @jaypal 哦,不!现在修好了。对不起你的键盘:(
【解决方案2】:

未经测试,但对可行的方法进行了有根据的猜测:

awk '{ print $1, $2, 100*$1/$2 }' yourfile.txt

要将其保存到某个位置,您必须将“stdout”重定向到一个文件。如果你想让它覆盖你的原始文件(在你测试它是否有效之前不要这样做!)你可以将它包装在一个 bash 脚本中:

#!/bin/bash

awk '{ print $1, $2, 100*$1/$2 }' "$1" > "$1.tmp"
mv "$1.tmp" "$1"

然后运行它

./thebashscript.sh yourfile.txt

【讨论】:

  • 您可能想在techrepublic.com/blog/linux-and-open-source/…阅读更多内容
  • 不需要-F'\t',因为awk默认任何空格
  • @Jotne:谢谢,我不确定 - 坐在没有任何 bash 模拟器 atm 的 Windows 机器上,我无法正确测试它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多