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

时间:2015-03-18 14:45:42

标签: loops awk gawk

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

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

但是当我添加一个循环时,我得到错误,可能是什么错误?

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

1 个答案:

答案 0 :(得分:0)

你错过了分号。这样:

for f in main_file* do

语法上应该是这样的:

for f in main_file*; do

但当然这是错误的做法 - 只需要拨打awk一次:

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

您不需要将FS设置为" ",因为这是默认值,而且只要您了解到使用" _"作为变量名称是个好主意 - 再也不要使用该源了!