我需要按bash变量过滤行。
var=$(cat $1 | awk -F"\t" ' $1 == "foo1" { print $0 }')
echo $var
我正在尝试将字符串“ foo1”替换为变量
column2=$(echo "foo1")
echo $column2
var=$(cat $1 | awk -v pres=$column2 -F"\t" ' $1 == $pres { print $0 }')
echo $var
在参数$ 1中,我传递了具有下一个文本的file.txt
foo2 AAAA 561214
foo3 AAAA 3
foo4 AAAA 10470670
foo5 AAAA 443507
foo1 AAAA 12473709
foo6 AAAA 1599707
foo8 AAAA 382820
foo7 BBBB 100000000000000
foo1 AAAA 12473709
foo1 AAAA 12473709
foo1 AAAA 12473709
foo1 AAAA 12473709
foo1 AAAA 12473709
foo1 AAAA 12473709
foo1 AAAA 12473709
我需要使用变量来执行此操作,因为我需要为第一列的每个不同值进行循环。
编辑
#我的问题与bash-How do i use shell variable in a awk script不同,因为我需要做一个条件来过滤文件中表的行。我可以做到这一点,但我不知道该如何结合做
var=$(cat $1 | awk -F"\t" ' $1 == "foo1" { print $0 }')
正在工作,但是当我尝试插入变量时停止工作。
答案 0 :(得分:2)
您应使用以下结构:
column2="foo1"
var=$(cat $1 | awk -v pres=$column2 -F"\t" ' $1 == pres { print $0 }')
awk
中的变量不需要$
符号
答案 1 :(得分:2)
请您尝试以下。
column2="foo1"
var=$(awk -v pres="$column2" -F"\t" '$1==pres' "$1")
我们不需要在这里使用cat
,因为awk
可以读取Input_file本身。
第二件事,当默认情况下代码中的条件为TRUE时,我们无需使用print
,它将打印该行(如果没有为该条件给出任何操作),因此我从上面的代码中将其删除。