gpt4 book ai didi

mysql - 具有多个分隔符的 AWK

转载 作者:行者123 更新时间:2023-11-29 23:19:10 25 4
gpt4 key购买 nike

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

,其中

  1. 1418043291.268345000 - 值1
  2. 14567744356|4|8v95489464 - 值2
  3. DC0289001840、NNN100、DC206286661 - 值3
  4. 03612037 - 值4
  5. ON1774B01 - 值5

对于 VALUE2 和 VALUE3,仅对中间行感兴趣,即 VALUE2 为“4”,VALUE3 为“NN100”。这些值(VALUE2、VALUE3)中的所有其他行对于外部的进一步计算来说都是不必要的,这就是为什么必须丢弃它们并且生成的插入命令必须如下所示:

insert into data (item1, item2, item3, item4, item5) values(1418043291.268345000,4,NNN100,03612037,ON1774B01)

请您告知如何修改 awk 命令来插入值:

 VALUE1:VALUE2_2:VALUE3_2:VALUE4:VALUE5 ? 

最佳答案

基于您的示例、解释,并进行了一些简化,并且没有 awk(在这种情况下不需要,并且对于操作系统来说更重)

sed 's/\([^:]*\):[^|]*|\([^|]*\)|[^,]*,\([^,]*\),[^:]*:\([^:]*\):\(.*\)/insert into data (item1, item2, item3, item4, item5) values(\1,\2,\3,\4,\5)/' YourFile

(GNU sed 上的 posix 版本所以 --posix)

真正的完整结构是使用完整值和子组:

sed 's/\([^:]*\):\([^|]*|\([^|]*\)|^[^:]*\):\([^,]*,\([^,]*\),[^:]*\):\([^:]*\):\(.*\)/insert into data (item1, item2, item3, item4, item5) values(\1,\3,\5,\6,\7)/' YourFile

现在,也可以只使用 awk,从性能和资源的角度来看,sed 后跟 awk 是为了避免(通常是可能的)

关于mysql - 具有多个分隔符的 AWK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com