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

6jygbczu  于 2023-11-17  发布在  Linux
关注(0)|答案(4)|浏览(147)

我有一个文本文件,我想使用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


但不知何故失败了。正确的方法是什么?

ql3eal8s

ql3eal8s1#

使用awk-v选项传递它。这样,你就可以分离出awk变量和shell变量。它更整洁,也没有额外的引号。

#!/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 -vcoltype="$col1type" '$2>0 && $1==col1type' $input

字符串

bz4sfanl

bz4sfanl2#

“双引号单引号”

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

字符串
举例说明:

$./a.sh arg1 
arg1

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


Linux测试

g52tjvyc

g52tjvyc3#

你需要双引号来允许变量插值,这意味着你需要用反斜杠转义其他的美元符号,这样$1$2就 * 不 * 插值了。你还需要在"$col1type"周围加上双引号。

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

字符串

yqkkidmi

yqkkidmi4#

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

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

字符串

相关问题