如何将Tshark输出的单行数据拆分转换为对应键值对
Tshark单行输出转键值对实现方案
核心逻辑是拆分tshark输出的竖线左右两侧的键、值列表,逐字段配对输出,用awk即可实现,无需复杂脚本。
方案1:输出空格分隔的a,1 b,2 c,3格式
处理命令如下,可直接接在tshark命令后管道运行,也可处理已导出的文本文件:
# 处理已导出的tshark输出文件 awk -F ' *\\| *' '{ split($1, keys, /,/) split($2, vals, /,/) res = "" for(i=1; i<=length(keys); i++){ res = res keys[i] "," vals[i] " " } print substr(res, 1, length(res)-1) }' tshark_output.txt # 直接对接tshark命令 tshark [你的tshark运行参数] | awk -F ' *\\| *' '{split($1,k,/,/);split($2,v,/,/);for(i=1;i<=length(k);i++) printf "%s,%s ",k[i],v[i];print ""}'
方案2:输出[{a,1},{b,2}]类数组配对格式
调整awk的输出格式即可:
awk -F ' *\\| *' '{ split($1, keys, /,/) split($2, vals, /,/) printf "[" for(i=1; i<=length(keys); i++){ printf "{%s,%s}", keys[i], vals[i] if(i < length(keys)) printf "," } printf "]\n" }' tshark_output.txt
如果需要标准JSON格式,把输出部分改为printf "{\"%s\":\"%s\"}"即可,输出结果为[{"a":"1"},{"b":"2"}]。
适配提示
如果你的tshark输出字段本身包含逗号、竖线,可先通过tshark的-E separator=参数指定特殊分隔符(比如#),再调整awk的-F参数对应分隔符即可。
内容的提问来源于stack exchange,提问作者Brett
相关产品推荐
相关产品推荐

