我正在尝试根据黑名单文件过滤目录中的多个文件 当我使用没有循环的单行时,脚本工作正常......
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 `>
答案 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设置为" "
,因为这是默认值,而且只要您了解到使用" _"作为变量名称是个好主意 - 再也不要使用该源了!