如何使用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 设置为 " "
,因为这是默认值,无论您在哪里了解到使用“_”作为变量名是个好主意 - 永远不要再使用该来源!
我正在尝试根据黑名单文件过滤目录中的多个文件 当我使用没有循环的单行时,脚本工作正常...
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 设置为 " "
,因为这是默认值,无论您在哪里了解到使用“_”作为变量名是个好主意 - 永远不要再使用该来源!