【问题标题】:subtract the values of two columns using awk or bash使用 awk 或 bash 减去两列的值
【发布时间】:2018-02-08 03:58:47
【问题描述】:

我有一些如下所示的文本文件。我想减去第 2 列和第 4 列的值,需要为输出创建一个新列。

co1  co2   co3    co4

r1  15.2  13.0   21.4
r2  23    15     15.7
r3  14    8      12

想要的输出

co1  co2   co3   co4   diff.    

r1  15.2  13.0   21.4   -6.2
r2  23    15     15.7   7.3
r3  14    8      12     2

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    注意:您可以将 awk 命令全部放在一行中,但这样会更整洁(如果需要,还可以更透明且更容易修改)。

    这个so.awk 脚本:

    NR==1{print $0, "   diff.\n"}
    NR>2{printf("%s\t%5.1f\n", $0, $2-$4)}
    

    给予:

    co1  co2   co3   co4     diff.
    
    r1  15.2  13.0   21.4    -6.2
    r2  23    15     15.7     7.3
    r3  14    8      12       2.0
    

    鉴于您在文件 data.txt 中的数据,发出以下命令:

     awk -f so.awk data.txt
    

    (您可能需要调整格式以满足您的确切需求)

    【讨论】:

      【解决方案2】:

      这种单线工作:

      awk 'NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt
      

      它给出:

      co1 co2 co3 co4 diff.
      
      r1 15.2 13.0 21.4 -6.2
      r2 23 15 15.7 7.3
      r3 14 8 12 2
      

      如果你想用标签分隔字段,这就是你想要的:

      awk 'BEGIN { OFS = "\t" } NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt
      

      【讨论】:

        【解决方案3】:

        如果没有标题,可以简化 Taku Miyakawa 的单行:

        awk '{ $5 = $2 - $4 } 1' input.txt > inputdiff.txt
        

        或使用制表符分隔:

        awk 'BEGIN { OFS = "\t" } { $5 = $2 - $4 } 1' input.txt > inputdiff.txt
        

        【讨论】:

          猜你喜欢
          • 2021-12-16
          • 1970-01-01
          • 2013-02-09
          • 1970-01-01
          • 1970-01-01
          • 2021-12-13
          • 1970-01-01
          • 2016-05-08
          • 2018-07-13
          相关资源
          最近更新 更多