背景:
mysqlをインポートするために、すべてのログがcsvに送信されます。
次のデータを含むログがたくさんあります。
Moon,Srv-1,2016-04-04 06:59:48,Entry #103 (s) test (AlphaNum_Need_This_32_Char_Long1),Msg On (ref2357 : Act)
Moon,Srv-2,2016-03-04 06:59:48,Entry #2 SomeLongtest (AlphaNum_Need_This_32_Char_Long2),Msg On (ref2357 : Act)
質問:
抽出方法:
AlphaNum_Need_This_32_Char_Long1 AlphaNum_Need_This_32_Char_Long2
または
部品を廃棄します
Entry #103 (s) test
。=>問題は、このテキストの長さと文字がalpha、num、
( { } [ ] ( ) / \ . < ># @ _ -
現在の進行状況:
sed
他のすべてのフィールドを使用して抽出できますawk
。Excelでは、これにより{テキストがD4の場合}の問題が解決されます。
=MID(D4,SEARCH("),",D4)-32,32)
これまで、私はMS Logparserを使用して文字列を反転し、32文字を検索するなどの作業を行ってきました。
ターゲット:Windowsログパーサーを使用せず、Linuxですべて実行してください。
答え1
sed -r 's/^.*\((.{32})\).*$/\1/' filename
答え2
Perlでは、負のインデックスを使用すると、右から文字数を数えることができます。
perl -aF, -lne 'print substr $F[3], -33, 32' < input
-n
入力を1行ずつ読みます。-a
@F
入力を配列に分割-F
分割する項目の指定-l
印刷する改行を追加