作为我的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}'
非常感谢你的帮助
答案 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}'