BEGIN { print "\n Extract some data from CDR Data Package. ","\n", "Processing begins at:",strftime("%Y%m%d%H%M%S", systime())
#为了记录程序的运行时间我在程序开始时输出当前的系统时间,用到了 AWK 的内置函数 strftime. } { #下面创建了数组 ta_record,数组的下标就是记录中的字段名 ta_record["field1"]="" ta_record["field2"]="" ta_record["field3"]="" ta_record["field4"]="" ………… ta_record["fieldn"]=""
#下面把每条记录中的字段与对应的值存入关联数组中 for (i=5; i<=(NF-1)/2;i++) { if(i%2 > 0) { value=tolower($(i+(NF-3)/2 )) if( match(value,/^'/) ) #有些字段的值是用单引号引起来的这个需 #要去掉。 { #这里用了 AWK 的 tolower 和 substr 函数 ta_record[tolower($i)]=substr(value,2,length(value)-2) } else #字段的值如果不带单引号直接赋值即可。 ta_record[tolower($i)]=value } } #根据自己的需要输出数据,可以加多个过滤条件,例如: #只输出字段 fieldx 的值为 3 和字段 fieldy 的值为 12 的记录 if( (NR+1)%10000 == 0) {printf("%s",". ")} if(ta_record["fieldx"] == 3 || ta_record["fieldy"] == 12 ) { printf("%s%s%s%s%s%s%s%s%s%s%s\n", ta_record["field1"],"|", ta_record["field2"],"|", ta_record["field3"],"|", ta_record["field4"],"|" ,ta_record["field5"],"|", ta_record["fieldN"],"|") >> ta_record["fieldz"] #这里用ta_record["fieldz"]作为输出文件是有好处 #的,如果fieldz有多个可能的值,例如1,3,5 #那么输出的结果就会生成文件名是1,3,5的三 #个文件,分别记录了fieldz的值为1,3,5的结果,文 #件名是动态产生的,当然您也可以写一个固定的 #文件名把所有结果输出到#一个结果文件中。 } }
#最后,在程序运行完成时输出当前的系统时间,这样就可以大概算出这个 #程序的总运行时间了。 END { print "\n","Processing ends at: ",strftime("%Y%m%d%H%M%S", systime()) }
|