如何将终端输出的Split and merge outputs parallel格式数据转换为符号与ID映射格式
如何将终端输出的Split and merge outputs parallel格式数据转换为符号与ID映射格式
我明白你的需求啦——把终端里这种用|分隔的键值对数据,转换成Symbol = ID的映射格式对吧?下面给你几个简单好用的方案,不管是想在终端快速处理,还是写个小脚本复用都能搞定:
方案一:用Awk命令行工具快速处理
如果你只想在终端里一次性处理,Awk是最方便的选择,一行命令就能搞定:
echo "55=22395|1007=BTCUSD|1008=3|55=22396|1007=BTCEUR|1008=2|55=22397|1007=ETHUSD|1008=3|55=22398|1007=ETHEUR|1008=3|55=20009|1007=TELENET GROUP|1008=2|55=20011|1007=MAGNEGAS CORP|1008=2|55=20012|1007=CALUMET SPEC PRDCTS|1008=2|55=20013|1007=CBOE HLDG INC|1008=2|55=20014|1007=ELECTRONIC ARTS INC|1008=2|55=20015|1007=EXPRESS SCRIPTS INC|1008=2|55=20016|1007=ADVANCE AUTO PARTS|1008=2|55=20017|1007=CHINA FUND INC|" | awk -F'|' '{for(i=1;i<=NF;i++){split($i,a,"=");if(a[1]=="55")id=a[2];if(a[1]=="1007")sym=a[2];if(id && sym){print sym" = "id;id="";sym=""}}}'
命令逻辑说明:
- 用
|作为字段分隔符,把整行数据拆成单个键值对 - 遍历每个键值对,用
=拆分出键和值 - 遇到
55就记录对应的ID,遇到1007就记录对应的符号 - 当同时拿到ID和符号时,输出
符号 = ID的格式,然后清空变量处理下一组
如果你的数据是来自某个命令的输出,直接把echo "..."换成那个命令就行,比如:
your-terminal-command | awk -F'|' '{for(i=1;i<=NF;i++){split($i,a,"=");if(a[1]=="55")id=a[2];if(a[1]=="1007")sym=a[2];if(id && sym){print sym" = "id;id="";sym=""}}}'
方案二:用Python脚本灵活处理
如果需要复用逻辑,或者要把结果保存成文件,写个Python小脚本更合适:
# 替换成你的原始数据,或者从终端读取输入 raw_data = "55=22395|1007=BTCUSD|1008=3|55=22396|1007=BTCEUR|1008=2|55=22397|1007=ETHUSD|1008=3|55=22398|1007=ETHEUR|1008=3|55=20009|1007=TELENET GROUP|1008=2|55=20011|1007=MAGNEGAS CORP|1008=2|55=20012|1007=CALUMET SPEC PRDCTS|1008=2|55=20013|1007=CBOE HLDG INC|1008=2|55=20014|1007=ELECTRONIC ARTS INC|1008=2|55=20015|1007=EXPRESS SCRIPTS INC|1008=2|55=20016|1007=ADVANCE AUTO PARTS|1008=2|55=20017|1007=CHINA FUND INC|" # 拆分数据并过滤空项 key_value_pairs = [pair for pair in raw_data.split('|') if pair] symbol_id_map = {} current_id = None for pair in key_value_pairs: key, value = pair.split('=') if key == '55': current_id = value elif key == '1007' and current_id is not None: # 保存映射关系 symbol_id_map[value] = current_id current_id = None # 重置ID,准备处理下一组 # 输出结果 for symbol, id_num in symbol_id_map.items(): print(f"{symbol} = {id_num}") # 如果需要保存到文件,添加下面的代码 # with open('symbol_id_mapping.txt', 'w') as f: # for symbol, id_num in symbol_id_map.items(): # f.write(f"{symbol} = {id_num}\n")
脚本逻辑说明:
- 先把原始数据按
|拆分,过滤掉末尾的空字符串 - 遍历每个键值对,临时存储当前ID,遇到符号时把映射存入字典
- 最后遍历字典输出格式,还可以轻松扩展保存到文件的功能
如果要从终端读取输入(比如管道传递数据),可以把raw_data的赋值改成:
import sys raw_data = sys.stdin.read()
然后用命令行执行:
your-terminal-command | python your-script-name.py
备注:内容来源于stack exchange,提问作者Ömer Cerrahpaşa
相关产品推荐
相关产品推荐

