直接多文件逐个处理,操作相同:
1、直接输入多个文件名:
> awk 'BEGIN{FS="|";OFS="|";print "GSM|BALANCE"}{if($13==20120530)print $1,$9}'
Subscriber_20120530.list Subscriber_20120531.list
2、根据正则表达式匹配多个文件:
> awk 'BEGIN{FS="|";OFS="|";print "GSM|BALANCE"}{if($13==20120530)print $1,$9}'
Subscriber_2012053*.list
对不同文件,执行不同操作:
1、只有两个文件时:(1.NR:已读总记录数 FNR:已读当前文件记录数 2.next:如果结束就执行下一个输入文件)
1)、格式:awk 'NR==FNR{...}NR>FNR{...}' file1 file2 或 awk 'NR==FNR{...}NR!=FNR{...}' file1 file2
> awk -F\| '{if($13==20120530){a[$1]=$1}}NR>FNR{if(a[$1]==$1)print $1,$9}'
Subscriber_20120531.list Subscriber_20120530.list
> awk -F\| '{if($13==20120530){a[$1]=$1}}NR!=FNR{if(a[$1]==$1)print $1,$9}'
Subscriber_20120531.list Subscriber_20120530.list
2)、格式:awk 'NR==FNR{...;next}{...}' file1 file2
> awk -F\| 'NR==FNR{if($13==20120530){a[$1]=$1}next}{if(a[$1]==$1)print $1,$9}'
Subscriber_20120531.list Subscriber_20120530.list
2、多于两个文件时:(1.ARGIND:当前被处理参数标志 2.ARGV :命令行参数数组 3.把文件名直接加入判断)
1)、格式:awk 'ARGIND==1{...}ARGIND==2{...}ARGIND==3{...}... ' file1 file2 file3 ...
> awk 'BEGIN{FS="|";OFS="|";print "GSM|BALANCE"}
ARGIND==1{if($13==20120530){a[$1]=$1}}
ARGIND==2{if(a[$1]==$1 && $9>0)print $1,$9}
ARGIND==3{if(a[$1]==$1 && $9>0)print $1,$9}'
Subscriber_20120531.list Subscriber_20120530.list Subscriber_20120529.list
2)、格式:awk 'FILENAME==ARGV[1]{...}FILENAME==ARGV[2]{...}FILENAME==ARGV[3]{...}...' file1 file2 file3 ...
> awk 'BEGIN{FS="|";OFS="|";print "GSM|BALANCE"}
FILENAME==ARGV[1]{if($13==20120530){a[$1]=$1}}
FILENAME==ARGV[2]{if(a[$1]==$1 && $9>0)print $1,$9}
FILENAME==ARGV[3]{if(a[$1]==$1 && $9>0)print $1,$9}'
Subscriber_20120531.list Subscriber_20120530.list Subscriber_20120529.list
3)、格式:awk 'FILENAME=="file1"{...}FILENAME=="file2"{...}FILENAME=="file3"{...}...' file1 file2 file3 ...
> awk 'BEGIN{FS="|";OFS="|";print "GSM|BALANCE"}
FILENAME=="Subscriber_20120531.list"{if($13==20120530){a[$1]=$1}}
FILENAME=="Subscriber_20120530.list"{if(a[$1]==$1 && $9>0)print $1,$9}
FILENAME=="Subscriber_20120529.list"{if(a[$1]==$1 && $9>0)print $1,$9}'
Subscriber_20120531.list Subscriber_20120530.list Subscriber_20120529.list
对于多个文件处理时,只有第一个文件处理方式不同,后面多个(未知个数)文件处理方式一致,如何精简后面部分重复代码,有高手知道请指点下,呵
> awk 'BEGIN{FS="|";OFS="|";print "GSM|BALANCE"}
FILENAME==ARGV[1]{if($13==20120530){a[$1]=$1}}
FILENAME==ARGV[2]{if(a[$1]==$1 && $9>0)print $1,$9}
FILENAME==ARGV[3]{if(a[$1]==$1 && $9>0)print $1,$9}
FILENAME==ARGV[4]{if(a[$1]==$1 && $9>0)print $1,$9}
FILENAME==ARGV[5]{if(a[$1]==$1 && $9>0)print $1,$9}
......'
Subscriber_20120531.list Subscriber_20120530.list
Subscriber_20120529.list Subscriber_20120528.list
Subscriber_20120527.list ......