如何通过命令行将CSV文件中的下一行内容拆分并粘贴至新列?
解决Shell中CSV数据格式转换问题
看起来你是想把单行的空格分隔数据拆分成标准的CSV格式,之前的awk命令因为错误使用了getline(你的数据都在同一行,不需要跨行读取)所以没达到预期效果。下面是正确的解决方案:
正确的awk命令
针对你的原始数据格式,我们需要遍历单行内的成对字段,生成对应的表头和数据行:
awk 'BEGIN {OFS=","} { # 打印CSV表头 print $1, "ColumnName2" # 从第2个字段开始,每两个字段为一组输出 for (i=2; i<=NF; i+=2) { print $i, $(i+1) } }' file.csv
命令解释
BEGIN {OFS=","}:提前设置输出字段分隔符为逗号,确保生成的是标准CSV格式;如果需要空格分隔,改成OFS=" "即可。print $1, "ColumnName2":用原始数据的第一个字段作为CSV第一列的表头,第二列固定使用你需求中的ColumnName2。for (i=2; i<=NF; i+=2):从第2个字段开始,每次步进2位(因为你的数据是对象名+数值成对出现的)。print $i, $(i+1):将每一对字段输出为单独一行,自动用之前设置的分隔符分隔。
测试示例
假设你的file.csv内容是:
ColumnName1 NameOfAnObject1 100 NameOfAnObject2 200
执行上述命令后,输出结果为:
ColumnName1,ColumnName2 NameOfAnObject1,100 NameOfAnObject2,200
完全符合你想要的格式。
为什么之前的命令失效?
你之前使用getline nextLine尝试读取下一行,但你的所有数据都在同一行中,getline会读取到空内容(如果文件只有这一行),导致后续的print nextLine,$1逻辑混乱,最终输出不符合预期的拼接结果。
内容的提问来源于stack exchange,提问作者Devops-Learner
相关产品推荐
相关产品推荐

