首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列内带有awk或sed的算术操作

列内带有awk或sed的算术操作
EN

Unix & Linux用户
提问于 2017-05-09 12:13:58
回答 1查看 2.4K关注 0票数 3

我有一个文件,其列包含简单的算术方程,我想要合并到算术结果中。

输入示例(制表符分隔的列):

代码语言:javascript
复制
+104-1+12   6   +3

我想计算每一列中的算术和。如果一列不包含算术符号,我将其视为在项之前包含一个+。虽然如果列以无符号开头(假设行从未以数字开头,如示例所示),添加+符号很容易(sed -E 's/(\t)([0-9]*)/\1\t+\2/g'将起作用)

我期望的输出如下:

代码语言:javascript
复制
115 6   3

我如何在unix中实现这一点?优先考虑awk/sed解决方案。

EN

回答 1

Unix & Linux用户

发布于 2017-05-26 06:25:19

下面是一个全awk解决方案,它利用awk的功能将数字的字符串表示转换为数字表示,而不使用外部可执行文件:

代码语言:javascript
复制
awk -F"\t" \
'BEGIN { OFS="\t" }
 { gsub(/-/,"|-") 
   gsub(/\+/,"|")
   for(i=1; i<=NF; i++) { ## iterate over columns
     num_parts=split($i,parts,"|")
     for(j=1; j<=num_parts; j++) ## iterate over arithmetic expression parts
       sums[i] += parts[j]+0 ## Adding zero marshals the string into a numeric
   }}
 END{
      for(i=1; i<=NF; i++) { 
        if(i>1) printf OFS
        printf sums[i]
      } 
      print "" }' file
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/363896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档