如何在Bash脚本中将字符串作为参数传递给AWK

时间:2010-03-16 01:49:01

标签: linux bash unix awk

我有一个我要过滤的文本文件 使用awk。文本文件如下所示:

foo 1
bar 2
bar 0.3
bar 100
qux 1033

我想在bash脚本中使用awk过滤这些文件。

#!/bin/bash

#input file
input=myfile.txt

# I need to pass this as parameter
# cos later I want to make it more general like
# coltype=$1
col1type="foo"   

#Filters
awk '$2>0 && $1==$col1type' $input

但不知怎的,它失败了。什么是正确的方法?

4 个答案:

答案 0 :(得分:10)

使用-v的{​​{1}}选项传递它。这样,你分离出awk变量和shell变量。它的整洁也没有额外的引用。

awk

答案 1 :(得分:5)

“双引号单引号”

awk '{print "'$1'"}'


例:

$./a.sh arg1 
arg1


$cat a.sh 
echo "test" | awk '{print "'$1'"}'


linux测试

答案 2 :(得分:4)

您需要双引号才能允许变量插值,这意味着您需要使用反斜杠转义其他美元符号,以便$1$2 插值。您还需要"$col1type"附近的双引号。

awk "\$2>0 && \$1==\"$col1type\"" 

答案 3 :(得分:2)

单引号禁止bash中的变量扩展:

awk '$2>0 && $1=='"$col1type"