【问题标题】:using awk to divide columns when separated by a colon用冒号分隔时使用 awk 来划分列
【发布时间】:2021-08-16 01:05:43
【问题描述】:

我有一个包含多个列的文件,如下所示:

12080:1016 108:9 84:23 2708:270 146:18 610:127 24:6 94:6 478:59 2816:279 108:29 16332:1534

基本上,对于每一列,我想将第二个数字除以第一个数字(即 1016/12080 等)。

我想打印每列的分区值 我知道我可以通过用“:”单独分割所有行然后分割来做到这一点,但这似乎需要做很多额外的工作。必须有一种更简单的方法来做到这一点,但我被困住了。

任何建议都会很棒。谢谢

【问题讨论】:

  • 请在您的问题中以代码的形式添加您的努力,这是非常鼓励的,谢谢。

标签: awk split division


【解决方案1】:

尝试:

awk '{for(i=1;i<=NF;i++) { v = $i;split($i,d,":"); printf d[2]/d[1] " ";   }} ' input.txt > out.txt

输入.txt

12080:1016      108:9   84:23   2708:270        146:18  610:127 24:6    94:6    478:59  2816:279        108:29  16332:1534

out.txt

0.084106 0.0833333 0.27381 0.0997046 0.123288 0.208197 0.25 0.0638298 0.123431 0.0990767 0.268519 0.093926

【讨论】:

  • -F" " 没有做任何有用的事情,因为" " 已经是默认的 FS 值。您所做的会将所有输入行的所有输出都塞到单个输出行上,添加尾随,,并且不提供使结果成为有效 POSIX 文本文件所需的终止换行符。我也不确定您为什么认为 OP 无论如何都需要逗号分隔的输出。
  • 我的错误,改了脚本,去掉了-F " ",感谢Ed,改成d [2] / d [1],感谢user3439894,感谢反馈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
相关资源
最近更新 更多