我可能在这里做一些愚蠢的事情(awk 的新手)......
我有一个包含多个列的 BigFile,我想通过名称列表(NamesList)过滤行。这些名称包含在文件的第 4 列中。
尝试使用 while 循环
while read -r line; do
cat BigFile.txt | awk '{if ($4=="$line") print $0;}' >> Output.txt
done < NamesList.txt
将过滤后的行打印到 Output.txt。这给了我一个空白文件:(
我究竟做错了什么?有没有更好的方法来解决这个问题?
您的实现的主要问题是
"$line"
外壳不会扩展它,因为它位于包含 awk 表达式的单引号内。您可以
$line
按如下方式传递给 awk:(请注意,这是对 cat 的无用使用)。但是,除非您特别需要按照循环实现生成的顺序进行匹配,否则最好通过让 awk 直接处理这两个文件来跳过整个 shell 循环。
(我假设您只是
>>
因为 shell 循环而使用)。