如何使用ksh脚本将键值对两列数据转换为列状表格数据?
实现方案:将“列|值”格式文件转为表头+值两行输出
针对你需要将每行列名|数据格式的文件,转换为第一行所有列名、第二行对应数据的需求,提供两种ksh实现方式:
方法一:使用awk快速处理
awk是处理文本的高效工具,一行命令即可完成转换:
awk -F'|' '{cols = cols $1 "|"; vals = vals $2 "|"} END {sub(/\|$/, "", cols); sub(/\|$/, "", vals); print cols; print vals}' input.txt
说明:
-F'|':指定字段分隔符为|- 遍历每一行时,将列名拼接至
cols变量、数据拼接至vals变量,均用|分隔 END块中用sub去掉两个变量末尾多余的|,再分别打印表头和数据行
方法二:ksh原生循环实现
如果依赖ksh原生语法,可使用循环逐行处理:
#!/usr/bin/ksh # 初始化存储表头和数据的变量 cols="" vals="" # 逐行读取文件,按|拆分列名和数据 while IFS='|' read -r col val; do if [ -n "$cols" ]; then cols="${cols}|${col}" vals="${vals}|${val}" else cols="$col" vals="$val" fi done < input.txt # 输出结果 echo "$cols" echo "$vals"
说明:
IFS='|':设置读取行时的分隔符,拆分出列名和数据- 循环中判断变量是否为空,避免开头出现多余的
| - 循环结束后输出整理好的表头和数据行
内容的提问来源于stack exchange,提问作者Shri_0303
相关产品推荐
相关产品推荐

