我有一个我要过滤的文本文件 使用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
但不知怎的,它失败了。什么是正确的方法?
答案 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"