编写Shell脚本将XTREMIO存储卷多段键值对转换为分号分隔单行
解决XTREMIO存储卷信息转分号分隔单行记录的Shell脚本
这里有一个基于awk的Shell脚本,专门处理你描述的场景——把多段键值对格式的XTREMIO存储卷信息,转换成指定格式的分号分隔单行记录:
脚本代码
#!/bin/bash # 处理XTREMIO存储卷信息,转换为分号分隔的单行记录 awk ' BEGIN { # 定义需要提取的字段,以及输出顺序 fields["Type"] = "" fields["UID"] = "" fields["Vendor"] = "" fields["Product"] = "" fields["Size"] = "" fields["Name"] = "" fields["Array Serial"] = "" # 固定输出顺序,和示例格式对齐 split("Type,UID,Vendor,Product,Size,Name,Array Serial", order_arr, ",") } # 处理非空行,提取键值对 /./ { split($0, kv, ": ") # 按": "分割键和值,确保匹配字段格式 key = kv[1] value = kv[2] if (key in fields) { fields[key] = value } } # 遇到空行(段落结束),输出当前记录并重置字段 !/./ { # 按预设顺序拼接字段 output = "" for (i=1; i<=length(order_arr); i++) { key = order_arr[i] output = output (output == "" ? "" : ";") fields[key] } print output # 重置字段,准备处理下一段 for (key in fields) { fields[key] = "" } } # 处理文件末尾的最后一段(避免因无空行丢失记录) END { output = "" for (i=1; i<=length(order_arr); i++) { key = order_arr[i] output = output (output == "" ? "" : ";") fields[key] } if (output != "") print output } ' "$1"
使用步骤
- 将上述代码保存为
convert_xtremio.sh - 给脚本添加执行权限:
chmod +x convert_xtremio.sh - 运行脚本,传入你的输入文件路径,输出可以重定向到新文件:
./convert_xtremio.sh your_input_file.txt > formatted_output.txt
示例说明
输入示例(片段)
Type: XTREMIO UID: 51,4f,0c,51,9d,00,05,28 Vendor: XtremIO Product: XtremApp Size: 5.00 GB Name: test_rep Array Serial: CKM00150400153 Type: XTREMIO UID: aa,bb,cc,dd,ee,ff,00,11 Vendor: XtremIO Product: XtremApp Size: 10.00 GB Name: prod_vol Array Serial: CKM00150400154
输出示例
XTREMIO;51,4f,0c,51,9d,00,05,28;XtremIO;XtremApp;5.00 GB;test_rep;CKM00150400153 XTREMIO;aa,bb,cc,dd,ee,ff,00,11;XtremIO;XtremApp;10.00 GB;prod_vol;CKM00150400154
注意事项
- 确保输入文件中每个字段的分隔符是
:(冒号+空格),如果你的文件格式有差异,修改split($0, kv, ": ")中的分隔符即可。 - 如果某段记录缺失某个字段,输出中对应位置会是空字符串(比如
XTREMIO;;;;test_vol;CKM00150400153),如果需要填充默认值,可以在拼接时添加判断逻辑。
内容的提问来源于stack exchange,提问作者wanaka
相关产品推荐
相关产品推荐

