如何编写bash并在命令行中定义awk常量

时间:2014-03-03 12:20:04

标签: bash awk

作为我的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}' 

非常感谢你的帮助

2 个答案:

答案 0 :(得分:3)

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

#!/bin/bash

awk -v constant1=$2 -v constant2=$3 '{print($1-constant1),($5-constant2)}' $1

您会注意到我删除了cat,因为cat无法将awk传送到awk,因为{{1}}可以从文件中读取。

答案 1 :(得分:0)

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

#!/bin/bash

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

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