2014-03-03 59 views
0

作爲我的bash的一部分,我想將一些常量從命令行傳遞給awk。例如,我想從第1列和CONSTANT2從列減去CONSTANT1 5如何編寫bash並在命令行中定義awk常量

$ 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}' 

非常感謝你的幫助

回答

3

由於awk是它自己的語言,默認情況下它不會與Bash共享相同的變量。要在awk命令中使用Bash變量,應該使用-v選項將變量傳遞到awk

#!/bin/bash 

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

你會發現我刪除cat,因爲沒有必要管catawk因爲awk可以從文件中讀取。

0

您需要刪除空白定義vaariables時:

#!/bin/bash 

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

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