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一个输入记录被读取之前执行一次

sed命令匹配并替换每行的第一个日期数字和分隔符

于 2013-08-14T15:14:50.797 回答
1

也许这会起作用(第一行将标题添加到新文件,第二行解析日期)。如果需要更多解析,请查看 sed。

echo "Date     Time        source Format Specific data" > new.file
sed 's/2013\//13./g' old.file | sed 's/\//./g' >> new.file
于 2013-08-14T15:04:38.317 回答