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

Xer*_*ura 3 linux awk

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

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

CSV文件内容如下所示:

col1,col2,col3,col4,col5,etc...
col1,col2,col3,col4,col5,etc...
etc...
Run Code Online (Sandbox Code Playgroud)

我的总体思路:

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

可以这样做吗?如果是这样,我如何告诉awk与该字符串进行比较?我发现了一些关于在文件名之前使用-符号的东西ARGV[],但无法使其正常工作.

gle*_*man 8

正如Karoly所说,

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

如果你想用管道输入awk:

cmds | awk -F, 'NR==FNR {str=$0; next}; $7==str {print $5}' - file
Run Code Online (Sandbox Code Playgroud)

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