bash - 如何通过变量 bash 过滤行

标签 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

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 }')

这是有效的,但是当我尝试插入变量时停止工作。

最佳答案

您可以尝试以下操作吗?

column2="foo1"
var=$(awk -v pres="$column2" -F"\t" '$1==pres' "$1")

我们不需要在这里使用cat,因为awk可以读取Input_file本身。

第二件事,当我们在代码中条件为 TRUE 时,我们不需要使用 print 默认情况下,它将打印该行(如果没有为该条件给出任何操作),所以我从上面的代码中删除了它。

关于bash - 如何通过变量 bash 过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59053251/

相关文章:

regex - 使用 Linux shell 命令从 CSV 文件中提取列

Linux/bash 管道和重定向

bash - 为什么我得到 "syntax error near unexpected token ` (' "?

bash - 如果错误的 Solaris 源以 255 退出,为什么 "false; echo $?"返回 1?

linux - 如何在 Linux 中比较一个文件和一堆文件

awk - 如何使用 grep/awk/sed 打印特定模式(不包括模式本身)之前的所有字符?

linux - Bash:在文件中的特定位置插入一行

mysql - 从文件读入变量 - Bash Script take2

linux - 从日志文件中提取日志时间

linux - 庆典 : inexplicable behavior sed