如何使用Shell命令将冒号分隔的test.txt转换为指定CSV格式
你之前用tr ": " '\n'达不到预期是因为tr会逐一匹配字符集中的单个字符做替换,会把所有冒号、所有空格都替换为换行,自然会出现每个元素单独换行的结果。
方案1:awk 实现(适配任意行数的键值对格式,通用性最强)
直接执行以下命令即可得到目标输出:
awk -F': ' '{keys[NR]=$1; values[NR]=$2} END { for(i=1;i<=NR;i++) printf "%s%s", keys[i], i==NR ? "\n" : "," for(i=1;i<=NR;i++) printf "%s%s", values[i], i==NR ? "\n" : "," }' test.txt
逻辑说明:
-F': '指定每行的分隔符为冒号加空格,正好匹配你文件里的键值分隔规则- 遍历每行时把冒号前的键存入
keys数组,冒号后的值存入values数组,NR为当前处理的行号 - 所有行处理完成后,先拼接所有键输出为表头行,再拼接所有值输出为数据行,元素之间用逗号分隔
方案2:cut + paste 组合(适合快速处理简单场景)
如果不想写复杂的awk逻辑,也可以用基础文本处理工具组合实现:
# 提取所有键拼接为表头行 keys=$(cut -d':' -f1 test.txt | paste -sd, -) # 提取所有值(去掉冒号后的空格)拼接为数据行 values=$(cut -d' ' -f2 test.txt | paste -sd, -) # 输出最终结果 echo -e "$keys\n$values"
内容的提问来源于stack exchange,提问作者Domica
相关产品推荐
相关产品推荐

