我正在尝试将tshark输出插入MySQL数据库。Tshark输出具有以下格式:
VALUE1:VALUE2_1|VALUE2_2|VALUE2_3:VALUE3_1,VALUE3_2,VALUE3_3:VALUE4:VALUE5
目前,我正在尝试通过管道将输出重定向到sed和awk:
|sed -u "s/^/insert into data (item1, item2, item3, item4, item5) values('/g"|awk -F":" -v OFS=',' '{print $1,$2}'
,但只需要一些值。
这样生成的命令必须看起来像:
insert into data (item1, item2, item3, item4, item5) values(value1,value2_2,value3_2,value4,value5)
还有一些来自开发环境的示例:
Tshark永久生成以下类型的输出:
1418043291.268345000:14567744356|4|8v95489464:DC0289001840,NNN100,DC206286661:03612037:ON1774B01
1418043291.201703000:14567744356|0|6b10992051:DC0289001840,NNN120,DC081276320:04891241:ON891N619
, 在哪里
对于VALUE2和VALUE3,仅对中间行感兴趣,即,对于VALUE2为“ 4”,对于VALUE3为“ NN100”。这些值(VALUE2,VALUE3)中的所有其他行对于从外面进行进一步的计算都是不必要的,这就是为什么必须将其丢弃并且生成的insert命令必须类似于以下内容的原因:
insert into data (item1, item2, item3, item4, item5) values(1418043291.268345000,4,NNN100,03612037,ON1774B01)
您能否提出建议,如何修改awk命令以插入值:
VALUE1:VALUE2_2:VALUE3_2:VALUE4:VALUE5 ?
根据您的示例,说明,并进行了一些简化和简化,没有awk(这种情况下不需要,并且对于OS来说更重)
sed 's/\([^:]*\):[^|]*|\([^|]*\)|[^,]*,\([^,]*\),[^:]*:\([^:]*\):\(.*\)/insert into data (item1, item2, item3, item4, item5) values(\1,\2,\3,\4,\5)/' YourFile
(posix版本--posix
,例如GNU sed)
真正的完整结构是使用完整值和子组:
sed 's/\([^:]*\):\([^|]*|\([^|]*\)|^[^:]*\):\([^,]*,\([^,]*\),[^:]*\):\([^:]*\):\(.*\)/insert into data (item1, item2, item3, item4, item5) values(\1,\3,\5,\6,\7)/' YourFile
现在,仅awk也是可能的,先执行sed,然后再执行awk是为了避免(通常是可能)性能和资源的观点
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句