テキストファイルの文字列の一部を返します。

テキストファイルの文字列の一部を返します。

背景:

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)

質問:

  1. 抽出方法:

    AlphaNum_Need_This_32_Char_Long1
    AlphaNum_Need_This_32_Char_Long2
    

または

  1. 部品を廃棄します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印刷する改行を追加

関連情報