Mysql 具有多个分隔符的AWK
我正在尝试将tshark输出插入MySQL数据库。Tshark输出具有以下格式:Mysql 具有多个分隔符的AWK,mysql,awk,sed,tshark,Mysql,Awk,Sed,Tshark,我正在尝试将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
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
,在哪里
1418043291.268345000-值1
14567744356 | 4 | 8v95489464-值2
DC0289001840,NNN100,DC206286661-值3
03612037-值4
ON1774B01-值5
对于VALUE2和VALUE3,只对中间行感兴趣,即4表示VALUE2,NN100表示VALUE3。这些值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,在操作系统中不需要awk
sed 's/\([^:]*\):[^|]*|\([^|]*\)|[^,]*,\([^,]*\),[^:]*:\([^:]*\):\(.*\)/insert into data (item1, item2, item3, item4, item5) values(\1,\2,\3,\4,\5)/' YourFile
posix版本so-posixon GNU sed
真正的完整结构使用完整值和子组:
sed 's/\([^:]*\):\([^|]*|\([^|]*\)|^[^:]*\):\([^,]*,\([^,]*\),[^:]*\):\([^:]*\):\(.*\)/insert into data (item1, item2, item3, item4, item5) values(\1,\3,\5,\6,\7)/' YourFile
现在,只使用awk也是可能的,sed加上awk是为了避免性能和资源方面经常可能出现的问题很清楚您想要什么,但有点不清楚您是如何做到这一点的:知道哪些字段需要选择,哪些字段应该删除的一般规则是什么?哪些标准具有良好的价值?为什么值2_1、值2_3和值3_3分别使用不同的前置或后置类型的分隔符丢弃,但与使用的另一种分隔符相同?这只是随意的点菜吗?fedorqui,NeronLeVelu,谢谢回复!我添加了一些更详细的解释和一个问题:如果我试图通过添加regex[^::]*:1来添加其他值。直到9个值-一切正常2.>9值-问题正在发生\10、\11..\19值打印\1值。如何解决此问题?是的,sed限制为9组。您需要在多个s///中执行此操作,或者如果可能,使用快捷方式将组的最大值限制为9