Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 具有多个分隔符的AWK_Mysql_Awk_Sed_Tshark - Fatal编程技术网

Mysql 具有多个分隔符的AWK

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

我正在尝试将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 
,在哪里

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