用冒号分隔时使用awk分隔列

用冒号分隔时使用awk分隔列,awk,split,division,Awk,Split,Division,我有一个文件,其中有多个列,如下所示: 12080:1016108:984:232708:270146:18610:12724:694:6478:592816:279108:2916332:1534 基本上,对于每一列,我想将第二个数字除以第一个数字(即1016/12080等) 我想打印每列的分区值 我知道我可以通过将所有行分别除以“:”然后再除以来实现这一点,但这似乎需要很多额外的工作。必须有一个更简单的方法来做,但我被卡住了 任何建议都很好。谢谢试试: awk '{for(i=1;i<

我有一个文件,其中有多个列,如下所示:

12080:1016108:984:232708:270146:18610:12724:694:6478:592816:279108:2916332:1534

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

我想打印每列的分区值 我知道我可以通过将所有行分别除以“:”然后再除以来实现这一点,但这似乎需要很多额外的工作。必须有一个更简单的方法来做,但我被卡住了

任何建议都很好。谢谢

试试:

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


请在您的问题中以代码的形式添加您的努力,我们非常鼓励您这样做,谢谢。
-F”“
没有做任何有用的事情,因为
”“
已经是默认的FS值。您所做的将把所有输入行的所有输出填充到单个输出行上,添加一个尾随的
,并且不提供结果成为有效POSIX文本文件所需的终止换行符。我也不知道你为什么认为OP需要逗号分隔的输出。我的错误是,更改了脚本,删除了
-F”“
,感谢Ed,并将其更改为
d[2]/d[1]
,感谢用户3439894,感谢反馈
12080:1016      108:9   84:23   2708:270        146:18  610:127 24:6    94:6    478:59  2816:279        108:29  16332:1534
0.084106 0.0833333 0.27381 0.0997046 0.123288 0.208197 0.25 0.0638298 0.123431 0.0990767 0.268519 0.093926