如何添加百分比列

2024-05-26

我想计算每行中所有行中的值的百分比并将其添加为另一列。 输入(分隔符为\t):

1   10      
2   10
3   20
4   40

添加第三列的所需输出显示基于第二列中的值计算的百分比:

1   10   12.50   
2   10   12.50
3   20   25.00
4   40   50.00

我尝试自己做,但是当我计算所有行的总计时,我不知道如何保持行的其余部分不变。非常感谢您的帮助!


在这里,一步 pass 的 awk 解决方案 -

awk 'NR==FNR{a = a + $2;next} {c = ($2/a)*100;print $1,$2,c }' file file

[jaypal:~/Temp] cat file
1   10      
2   10
3   20
4   40
[jaypal:~/Temp] awk 'NR==FNR{a = a + $2;next} {c = ($2/a)*100;print $1,$2,c }' file file
1 10 12.5
2 10 12.5
3 20 25
4 40 50

Update:如果输出中需要制表符,则只需将 OFS 变量设置为“\t”。

[jaypal:~/Temp] awk -v OFS="\t" 'NR==FNR{a = a + $2;next} {c = ($2/a)*100;print $1,$2,c }' file file
1   10  12.5
2   10  12.5
3   20  25
4   40  50

模式 {action} 语句的突破:

  • 第一个模式是NR==FNR。 FNR 是 awk 的内置变量,用于跟踪给定文件中的记录数(默认情况下用换行符分隔)。因此,在我们的例子中,FNR 为 4。NR 与 FNR 类似,但它不会重置为 0。它会继续增长。所以在我们的例子中 NR 是 8。

  • 此模式仅适用于前 4 条记录,而这正是我们想要的。仔细阅读 4 条记录后,我们将总计分配给一个变量a。请注意,我们没有初始化它。在awk我们不必这样做。但是,如果整个第 2 列都是 0,这就会中断。因此,您可以通过在第二个操作语句中放置 if 语句来处理它,即仅当 a > 0 时才进行除法,否则除以 0 或其他值。

  • next之所以需要,是因为我们并不真正希望执行第二个模式 {action} 语句。next告诉 awk 停止进一步的操作并移至下一条记录。

  • 一旦解析了四个记录,下一个模式{action}就开始,这非常简单。计算百分比并打印第 1 列和第 2 列以及它们旁边的百分比。

Note: 正如 @lhf 在评论中提到的,只有当文件中有数据集时,这一行才有效。如果通过管道传递数据,它将不起作用。

在评论中,正在讨论如何做到这一点awk one-liner从 a 获取输入pipe代替file。我能想到的唯一方法是将列值存储在array然后使用for loop吐出每个值及其百分比。

Now arrays in awk are associative并且永远不会按顺序排列,即从数组中取出值的顺序不会与它们进入的顺序相同。因此,如果可以的话,那么下面的一行应该可以工作。

[jaypal:~/Temp] cat file
1   10      
2   10
3   20
4   40

[jaypal:~/Temp] cat file | awk '{b[$1]=$2;sum=sum+$2} END{for (i in b) print i,b[i],(b[i]/sum)*100}'
2 10 12.5
3 20 25
4 40 50
1 10 12.5

为了让它们按顺序排列,您可以将结果通过管道传递给sort.

[jaypal:~/Temp] cat file | awk '{b[$1]=$2;sum=sum+$2} END{for (i in b) print i,b[i],(b[i]/sum)*100}' | sort -n
1 10 12.5
2 10 12.5
3 20 25
4 40 50
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何添加百分比列 的相关文章

随机推荐

  • 优化查找所有实现 IInterface 的类以及使用特定类型显式实现它的类

    我定义了一个接口 ISerializeDeserialize 和一些继承通用接口的类 我还有一些使用 CodeDomProvider 生成代码的程序集 它生成从同一接口继承的类 但使用特定类型实现它 我想要实现的是获取通用实现和实现特定类型
  • 如何将flex和bison与Qt项目集成?

    我正在 git 源代码控制下使用 Qt4 制作 GUI 程序 Github页面 https github com vinayak garg dic sim 项目的一小部分需要扫描和解析 所以我想在项目中使用flex和bison 我能想到3种
  • 在 Mule 3.4 中模拟 while 循环

    我需要在 Mule Flow 中使用 while 循环来从自定义 DAO 中加载数据块 我使用表达式转换器来访问 DAO 直到他不再提供任何项目 我不知道 DAO 提供的项目总量 Mule 3 4 中没有内置 while 循环 我的第一个想
  • Haskell Fibonacci 达到最大指定数?

    我有一个已启动并正在运行的 Haskell 函数 但它做错了事情 它应该输出最多指定最大数量的斐波那契数列 像这样 fibonacciSequence 86 1 1 2 3 5 8 13 21 33 54 我的代码当前输出斐波那契数列中的前
  • YQL:不再支持 html 表

    我使用 YQL 获取一些 html 页面以从中读取信息 从今天起我收到返回消息 不再支持 html 表 请参阅https policies yahoo com us en yahoo terms product atos yql index
  • 如何使用线程使 Windows 服务长期运行

    我有一个 win 服务托管一些我需要保持长时间运行的工作流程 一个 WorkflowApplication 和一个 WorkflowServiceHost 因为 OnStart 要求它完成并返回操作系统 所以我有一个在线程池中的另一个线程上
  • 西班牙语单词的正则表达式是什么?

    正则表达式语言使用 B 来包含 A Z a z 0 9 和 并且 b 被定义为单词边界 如何编写匹配所有有效西班牙语单词 包括诸如 等字符 的正则表达式 我正在使用 NET 使用西班牙语区域设置并使您的正则表达式区域设置敏感
  • Nginx - 特定位置的另一个根

    我在下面有一些静态 html 文件 var www project1 该项目的 Nginx 配置是 server name www project1 com project1 com root var www project1 locati
  • dc js 复合条形图 折线图

    我有一个 dc js 条形图 如下所示这个叉形小提琴 http jsfiddle net 89218vf1 3 此条形图将加载预定义的过滤器 例如本例中的 25 35 现在 我需要显示一个与条形图复合的折线图 突出显示带有高低线的过滤数据
  • 对于 aws s3,预检响应无效(重定向)

    我正在尝试将图像上传到我的 Amazon S3 存储桶 但即使我已经正确设置了 CORS 配置 我仍然收到此 CORS 错误 这是我的 CORS 配置
  • 如何用线条在一个Excel散点图中绘制多个分组数据

    我在 Excel 中的一张图表 带线的散点图 中绘制分组数据 按索引 时遇到一些困难 我将非常感谢您的帮助 我的数据分为三列 第一列是数据或组的索引 即每组数据的唯一编号 第二列是时间 第三列是数据 Group Time Data 1 1
  • Phonegap Cordova Statusbar 插件创建双栏

    我正在开发一个使用phonegap 的应用程序 通过 CLI 构建 而不是 PhoneGap 构建 我的 cordova plugin statusbar 插件有问题 打开时它将增加额外的条高度 这是它的样子 双高菜单栏 我通过两种方式实现
  • 如果外部程序挂起,如何退出进程 (.exec())

    让我解释一下我的软件 我的软件所做的只是创建 10 个线程 并为每个线程分配许多任务 然后 每个线程创建一个运行时进程 该进程将启动一个 cmd 批处理文件 该文件又将启动一个程序 该程序将远程登录到设备 我有大约 200 个设备 以轮询其
  • 我对 C# 接口成员的默认访问修饰符感到困惑[重复]

    这个问题在这里已经有答案了 什么是访问修饰符interface方法 它应该是public or protected因为当你实现它们时你可以访问它们 这是有道理的 也应该是abstract因为他们没有实施 但最近我在读一本书 名叫通过 C 进
  • “你好,TensorFlow!”使用 C API

    出于学习目的 如何使用 TensorFlow C API 编写此 Python 示例 import tensorflow as tf hello tf constant hello TensorFlow sess tf Session pr
  • 模板类型推导参考

    我一直在使用具有以下形式代码的模板来进行类型推导 打印 include
  • 使用 sed 和 grep/egrep 进行搜索和替换

    我在用egrep R后跟包含大约 10 个并集的正则表达式 如下所示 jpg png gif等等 这很好用 现在我想替换所有找到的字符串 bmp 我在想类似的事情 egrep lR jpg png gif sed s some expres
  • VSTO 工具:Office 2010 到 2013 升级

    我正在开发 Excel 的 VSTO 工具项目 我现在正在升级我的机器 我的 旧 笔记本电脑运行的是 Windows 7 x64 Office 2010 和 Visual Studio 2012 我的新机器运行的是 Windows 8 x6
  • 如何为 GlassFish Web 应用程序提供对外部资源(文件)的访问?

    我是一个有点玻璃鱼 http en wikipedia org wiki GlassFish初学者 所以请原谅我对这个问题的无知 基本上 我们正在为一个游戏网站提供服务 为了使我们的网络应用程序可以下载客户端 我们将其复制到domain1中
  • 如何添加百分比列

    我想计算每行中所有行中的值的百分比并将其添加为另一列 输入 分隔符为 t 1 10 2 10 3 20 4 40 添加第三列的所需输出显示基于第二列中的值计算的百分比 1 10 12 50 2 10 12 50 3 20 25 00 4 4