2016-03-22 29 views
1

私は、次のようなテキストで大きなログファイルがあります。読書やテキストファイルに一致するパターンを書き込む

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をつかんで興味を持っています - ### = 4044#IMSI」の下に来る値# "を入力して、対応する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

あなたはこの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 
+0

それは素晴らしいanubhavaに動作します。心配するのは、 "4044 ##"が時々繰り返され、CSP - ##が1回だけ出現することです。だから、私がawkを走らせると、同じ4044 ###のためにCSP - ##値の両方をNILに与えます。助言がありますか ? – slyclam

+0

このawkコマンドは実際に '4044 ...'文字列を検索していません。それは '$ 5'を得るだけです。問題のサンプルデータを出力してみたところ、それは良いと思われます。 – anubhava

+1

私は今理解しています。ありがとうございました。 – slyclam

関連する問題