0

XML ファイルを指定して、それを解析するために Bash を作成していますが、ヘッダーと文字列の分割についてサポートが必要ですか? これは私がこれまでに持っているものです:

<dbg><h><d t="2013/08/11 (Aug) (Sun) 00:56:23.491" m="CANLogging" f="../../../ApplCtrl/CANMessageLoger.cpp" l="120" fnc="void CANMessageLoger::WriteToLog(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t*)" lvl="DBG_EVENT" thrd=""/></h><b> d2    ff    f7   0c 10 27 ff ff ff ff ff </b></dbg>

grep CANLogging $1 |  awk '{printf("%s %s",$2,$5); i=18; while(i<NF) { printf("  %s", $i); ++i} printf("\n");}'  | awk -F "\"" '{print $2 " " $3}' > CAN

grep から生成される次の約 100,000 行があります。

2013/08/11 00:56:23.491   d2  ff  f7  0c  10  27  ff  ff  ff  ff  ff



ただし、出力ファイルにヘッダーを追加する必要があります。

Date     Time        source Format Specific data 

そして、日付文字列を解析して少し変更するには、次のようにします。

13.08.11 00:56:23.491   d2  ff  f7  0c  10  27  ff  ff  ff  ff  ff

svante を使用すると、次のようになります。

grep CANLogging $1 |  awk '{printf("%s %s",$2,$5); i=18; while(i<NF) { printf("  %s", $i); ++i} printf("\n");}'  | awk -F "\"" 'BEGIN{print "Date     Time        source Format Specific data"}{print $2 " " $3}' | sed 's/^\([0-9]\{2\}\)\([0-9]\{2\}\)\/\([0-9]\{2\}\)\//\2.\3./' > CAN
4

2 に答える 2

2

これはうまくいくはずです。単純な日付形式の変更のために、最後の awk を変更して、ヘッダーとパイプを sed に含めます。

... | awk -F "\"" 'BEGIN{print "Date     Time        source Format Specific data"}{print $2 " " $3}' | sed 's/^\([0-9]\{2\}\)\([0-9]\{2\}\)\/\([0-9]\{2\}\)\//\2.\3./' > CAN

BEGIN ルールは、最初のawk入力レコードが読み取られる前に 1 回実行されます。

このsedコマンドは、各行の最初の日付の数字と区切り文字を照合して置き換えます

于 2013-08-14T15:14:50.797 に答える