在文本文件中读取和写入匹配模式

时间:2016-03-22 11:32:49

标签: regex text awk pattern-matching

我有一个包含以下文字的大日志文件:

C:\>mml "hgsdp:imsi=404421896673168, all;" | findstr CSP
C:\>mml "hgsdp:imsi=404421911915615, all;" | findstr CSP
RSA-5        PDPCP-5      CSP-42       REDMCH-1

C:\>mml "hgsdp:imsi=404421800964442, all;" | findstr CSP
BS3G-1       RSA-5        PDPCP-5      CSP-40

C:\>mml "hgsdp:imsi=404421737909153, all;" | findstr CSP
C:\>mml "hgsdp:imsi=404421852512826, all;" | findstr CSP
RSA-5        PDPCP-5      CSP-21       REDMCH-1

我有兴趣抓住CSP - ###的价值来自" imsi = 4044 ##"并写入另一个文件以及相应的4044 ##号。 因此,样本的最终输出将是:

404421896673168 NIL
404421911915615 CSP-42
404421800964442 CSP-40
404421737909153 NIL
404421852512826 CSP-21

我尝试过使用awk但无法使用它:

awk '/4044%/{N=NR+1;next} NR==N{print $3}' csp.log > output.txt

感谢您能提供帮助。

1 个答案:

答案 0 :(得分:1)

你可以使用这个awk:

awk -F '[[:blank:]:=,]+' '/findstr CSP/ && $4=="imsi" {
  if (imsi != "")
     print imsi, "NIL"
  imsi=$5
  next
}
/CSP-/ {
   for(i=1; i<=NF; i++)
      if ($i ~ /CSP-/)
         break
   print imsi, $i
   imsi=""
}' file

404421896673168 NIL
404421911915615 CSP-42
404421800964442 CSP-40
404421737909153 NIL
404421852512826 CSP-21
相关问题