我想知道如何让 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[]
的内容,但无法使其正常工作。
正如卡罗利建议的那样,
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
我认为第一个选项更具可读性。
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
}