需要搜索图案并打印其下一个值



查询:我有一个文件,里面有多行文字,需要从每行获取2个条目,APP_ID:686&APP_SUBSC_ID:68601字段不是常量,而是随机的。需要搜索图案并打印下一个值。

问题:如何做到这一点?

输入文件

1.**8340411087390720000**     68601 CSS:css|unidades_promotion:NA|stopc:False|USER-AGENT:Mozilla/5.0 (Linux; Android 6.0.1;Safari/537.36|CONTENT_ID:|cmpSrc:TrafficCompany_MK|omrevposition:|unidades:999999|randomAmtFlag:false|**APP_ID:686**|CIRCLE_ID:1|PACK_NAME:CVAS_44869_SUB|network-type:WIFI|cmpId:Spain_Movistar_Tinder_TrafficCompany|opr:Telefonica-CVAS|**APP_SUBSC_ID:68601**|ctry:ES|ctid:m7RZCi6ANPG2rIMFIIhOCJR5qjLad6o95JVBnr2V8Sc|bypasslimit:|svc:19|APP_NAME:TINDER|sid:m7RZCi6ANPG2rIMFIIhOCJR5qjLad6o95JVBnr2V8Sc|

代码

awk -f "|" '{ for (x=1; x<NF; x++ ) { if ($x == "APP_SUBSC_ID:") {x=x+1; printf("%sn", $x); break}}}'

所需输出:

APP_ID:686 APP_SUBSC_ID:68601

请您尝试以下操作。用GNUawk中显示的示例编写和测试。

awk '
match($0,/APP_ID:[0-9]+/){
id=substr($0,RSTART,RLENGTH)
}
match($0,/APP_SUBSC_ID:[0-9]+/){
print (id?id:"No id"),substr($0,RSTART,RLENGTH)
id=""
}' Input_file

解释:添加以上详细解释。

awk '                                ##Starting awk program from here.
match($0,/APP_ID:[0-9]+/){           ##using match function to match APP_ID: digits here.
id=substr($0,RSTART,RLENGTH)       ##Creating id variable which has matched regex value as shown above.
}
match($0,/APP_SUBSC_ID:[0-9]+/){     ##Using match function to match APP_SUBSC_ID: digits here.
print (id?id:"No id"),substr($0,RSTART,RLENGTH) ##Printing id or no_id(in case its not found) and value of matched sub string.
}
' Input_file                         ##Mentioning Input_file name here.

根据OP关于使用一个衬垫的评论:

awk 'match($0,/APP_ID:[0-9]+/){id=substr($0,RSTART,RLENGTH)} match($0,/APP_SUBSC_ID:[0-9]+/){print (id?id:"No id"),substr($0,RSTART,RLENGTH)}' Input_file

我将使用GNUAWK按照以下方式进行。设file.txt内容为:

1.**8340411087390720000**     68601 CSS:css|unidades_promotion:NA|stopc:False|USER-AGENT:Mozilla/5.0 (Linux; Android 6.0.1;Safari/537.36|CONTENT_ID:|cmpSrc:TrafficCompany_MK|omrevposition:|unidades:999999|randomAmtFlag:false|**APP_ID:686**|CIRCLE_ID:1|PACK_NAME:CVAS_44869_SUB|network-type:WIFI|cmpId:Spain_Movistar_Tinder_TrafficCompany|opr:Telefonica-CVAS|**APP_SUBSC_ID:68601**|ctry:ES|ctid:m7RZCi6ANPG2rIMFIIhOCJR5qjLad6o95JVBnr2V8Sc|bypasslimit:|svc:19|APP_NAME:TINDER|sid:m7RZCi6ANPG2rIMFIIhOCJR5qjLad6o95JVBnr2V8Sc|

然后

awk 'BEGIN{FPAT="(APP_ID:[0-9]+)|(APP_SUBSC_ID:[0-9]+)"}{$1=$1;print}' file.txt

输出

APP_ID:686 APP_SUBSC_ID:68601

说明:我指定了FPAT,即字段模式,因此指示将行的匹配元素视为字段:(APP_ID:后跟一个或多个数字(或(APP_SUBSC_ID:后跟一个以上数字(。然后我需要做一些事情,这样AWK将重建行,因此我做$1=$1(如果没有它,print将打印整个未更改的行(

(在gawk 4.2.1中测试(

相关内容

  • 没有找到相关文章

最新更新