awk - 来自字符串的 awk 算术运算
问题描述
我在一个文件中有一个特定的列,其中包含这样的字符串:
1.1*1024
1.0*1024
1.1*1024
...
我想要数字结果:
1126.4
1024.0
1126.4
所以我尝试了这个,请注意尺寸在我文件的第 6 列:
$ cat file | awk '{col=$6;size=sprintf("%f", col);print "=> col = "col" size = "size}'
=> col = 1.1*1024 size = 1.100000
=> col = 1.0*1024 size = 1.000000
=> col = 1.1*1024 size = 1.100000
EDIT1 我的输入文件如下所示:
$ cat file
[[ ]] toto1.mp4 2019-04-16 22:11 1.1*1024
[[ ]] toto2.mp4 2019-04-16 21:41 1.0*1024
[[ ]] toto3.mp4 2019-04-16 22:40 1.1*1024
[[ ]] toto4.mp4 2019-04-16 22:09 1.1*1024
...
不知何故,乘法被忽略了。
你能帮我吗 ?
解决方案
这是评估字符串的通用方法,它可以处理*
, +
,-
等/
。如果您可以使用perl
,则字符串有选项eval
,这将从输入中评估字符串以进行数学运算。
CASE-1:评估整行时:
cat inputfile
1+1
2*2
3/3
4.5*2
5/2
perl -nle ' print eval ' inputfile
2
4
1
9
2.5
CASE-2:仅评估一列时:在这种情况下是第 6 列。提供要评估的列号,F[5] 是第 6 列。
perl -nale 'print eval $F[5]' inputfile
1126.4
1024
1126.4
1126.4
case-3:评估第 6 列时,但打印整个记录。评估第 6 列并更新其值,然后打印整行。
perl -nale '$F[5] = eval $F[5] ;print "@F"' inputfile
[[ ]] toto1.mp4 2019-04-16 22:11 1126.4
[[ ]] toto2.mp4 2019-04-16 21:41 1024
[[ ]] toto3.mp4 2019-04-16 22:40 1126.4
[[ ]] toto4.mp4 2019-04-16 22:09 1126.4
推荐阅读
- python - 如何使用 matplotlib 正确绘制条形图?
- nginx - 我们可以在 proxy_pass 之后放置 proxy_set_header X-Forwarded-For
- url - 如何在从 Azure Blob 存储中获取视频时获取 Blob URL
- javascript - 将 HTML 文件内容加载到元素中
- php - 如何在 PHP 中使用对象数组以及如何获得不同的产品类别和子类别?
- c - 下面的 C 代码做了什么 - 它是多余的吗
- settings - 如何在 android 覆盖中设置默认设置(强制门户模式)
- wordpress - 如何使用每个数据库制作多站点
- c++ - Linux 上的 C++ 插件 ABI 问题
- python - 如何从类似json的文本中提取值