【问题标题】:How to write a bash and define awk constants in command line [duplicate]如何编写bash并在命令行中定义awk常量[重复]
【发布时间】:2014-03-03 12:20:04
【问题描述】:

作为 bash 的一部分,我想将一些常量从命令行传递给 awk。例如,我想从第 1 列中减去 constant1,从第 5 列中减去 constant2

$ sh bash.sh infile 0.54 0.32

#!/bin/bash

#infile = $1 
#constant1 = $2
#constant2 = $3

cat $1 | awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6}' 

非常感谢您的帮助

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    由于awk 是它自己的语言,默认情况下它不共享与 Bash 相同的变量。要在 awk 命令中使用 Bash 变量,您应该使用 -v 选项将变量传递给 awk

    #!/bin/bash
    
    awk -v constant1=$2 -v constant2=$3 '{print($1-constant1),($5-constant2)}' $1
    

    您会注意到我删除了cat,因为无需将cat 导入awk,因为awk 可以读取文件。

    【讨论】:

      【解决方案2】:

      您需要在定义变量时消除间隙:

      #!/bin/bash
      
      infile=$1 
      constant1=$2
      constant2=$3
      
      cat $1 | awk '{print $1 $2 $3 $4 $5 $6}' 
      

      【讨论】:

        猜你喜欢
        • 2018-04-22
        • 2019-01-12
        • 1970-01-01
        • 2013-12-25
        • 2016-07-08
        • 2018-01-16
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        相关资源
        最近更新 更多