如何通过变量bash筛选行

如何通过变量bash筛选行,bash,awk,Bash,Awk,我需要用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,其中包含下一个文本 f

我需要用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
我需要用一个变量来实现这一点,因为我需要循环第一列的每个不同值

编辑

我的问题与其他问题不同,因为我需要执行条件筛选来筛选文件中表的行。我可以这样做,是张贴在该链接,但我不知道如何结合起来做

var=$(cat $1 | awk -F"\t" ' $1 == "foo1" { print $0 }')

这正在工作,但当我尝试插入变量stop working时。

您应该使用以下结构:

column2="foo1"
var=$(cat $1 | awk -v pres=$column2 -F"\t" ' $1 == pres { print $0 }')

awk中的变量不需要$符号

您应该使用以下结构:

column2="foo1"
var=$(cat $1 | awk -v pres=$column2 -F"\t" ' $1 == pres { print $0 }')

awk中的变量不需要$符号,请尝试以下操作

column2="foo1"
var=$(awk -v pres="$column2" -F"\t" '$1==pres' "$1")
我们不需要在这里使用cat,因为awk可以读取输入文件本身


第二件事,我们不需要使用打印,当我们在代码中看到一个条件为真时,默认情况下,如果没有为该条件执行任何操作,它将打印该行,所以我从上面的代码中删除了它

你能试试下面的吗

column2="foo1"
var=$(awk -v pres="$column2" -F"\t" '$1==pres' "$1")
我们不需要在这里使用cat,因为awk可以读取输入文件本身


第二件事,我们不需要使用打印,当我们在代码中看到一个条件为真时,默认情况下,如果没有为该条件执行任何操作,它将打印该行,所以我从上面的代码中删除了它

我已经看过了。我没办法解决这个问题。很可能你的要求比你应该要求的要少。为什么要将筛选结果分配给变量,为什么需要在循环中执行此操作。接下来的步骤很可能与脚本结合使用,只运行一次。我已经看过了。我没办法解决这个问题。很可能你的要求比你应该要求的要少。为什么要将筛选结果分配给变量,为什么需要在循环中执行此操作。接下来的步骤很可能与脚本结合使用,并且只运行一次。