如何使用awk过滤目录中的多个文件?

How to do filtering of multiple files in a directory using awk?

我正在尝试根据黑名单文件过滤目录中的多个文件 当我使用没有循环的单行时,脚本工作正常...

 awk >rest.txt 'NR==FNR{_[];next}!( in _)' FS=" " blist_file.txt main_file.txt

但是当我添加一个循环时,我得到了错误,可能是哪里出了问题?

$ for f in main_file* do awk >res_$f 'NR==FNR{_[];next}!( in _)' FS=" " blist_file.txt $f; done
-bash: syntax error near unexpected token `>

你少了一个分号。这个:

for f in main_file* do

语法上应该是这样的:

for f in main_file*; do

但这当然是错误的方法 - 只需调用一次 awk 即可:

awk '
    NR==FNR {blist[]; next }
    FNR==1 {close(out); out="res_" FILENAME }
    !( in blist) { print > out }
' blist_file.txt main_file*.txt

您不需要将 FS 设置为 " ",因为这是默认值,无论您在哪里了解到使用“_”作为变量名是个好主意 - 永远不要再使用该来源!