2015-10-15 51 views
0

我想知道如何让awk从管道输出和文件中获取字符串?如何从管道和文件中输入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[]的一些东西,但无法使其工作。

+1

*请勿*使用管道。将搜索到的字符串存储在变量中。 –

回答

4

由于卡罗利表明,

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 

我觉得第一个选项是更具可读性。