如何从管道和文件中提供 awk 输入?

问题描述 投票:0回答:2

我想知道如何让 awk 从管道输出和文件中获取字符串?

我基本上有一系列命令,最终会输出一个字符串。我想对照 csv 文件检查此字符串(列以逗号分隔)。然后,我想找到文件中包含 csv 文件第 7 列中的字符串的第一行,并打印出该行第 5 列的内容。另外,我不太了解 linux 命令行实用程序/awk,所以请随意建议完全不同的方法。 :)

CSV 文件内容如下所示:

col1,col2,col3,col4,col5,etc...
col1,col2,col3,col4,col5,etc...
etc...

我的总体思路:

(rest of commands that will give a string) | awk -F ',' 'if($5 == string){print $7;exit}' filename.txt

这可以做到吗?如果是这样,我如何告诉 awk 与该字符串进行比较? 我发现了一些关于在文件名之前使用

-
符号和
ARGV[]
的内容,但无法使其正常工作。

linux awk
2个回答
12
投票

正如卡罗利建议的那样,

str=$( rest of commands that will give a string )
awk -v s="$str" -F, '$7==s {print $5; exit}' file

如果你想用管道输入 awk:

cmds | awk -F, 'NR==FNR {str=$0; next}; $7==str {print $5}' - file

我认为第一个选项更具可读性。


0
投票
echo 'BEGIN { OFS = RS } /2023/ { print $2, $3, $4, $5 }' | 
gawk -p- -b -f- <( gdate )

Dec
26
17:03:17
EST

    # gawk profile, created Tue Dec 26 17:03:17 2023

    # BEGIN rule(s)

    BEGIN {
     1      OFS = RS
    }

    # Rule(s)

     1  /2023/ { # 1
     1      print $2, $3, $4, $5
    }
© www.soinside.com 2019 - 2024. All rights reserved.