Bash替换为CSV多列

时间:2018-07-09 16:53:30

标签: bash awk sed

我具有以下CSV格式:

B

我想从每一列中获取数据,除了第一列之外,是数组中的最后一个值,如下所示:

data_disk01,"/opt=920MB;4512;4917;0;4855","/=4244MB;5723;6041;0;6359","/tmp=408MB;998;1053;0;1109","/var=789MB;1673;1766;0;1859","/boot=53MB;656;692;0;729"

我尝试过类似的事情:

data_disk01,"/opt=4855","/=6359","/tmp=1109","/var=1859","/boot=729"

只是字符串,我设法做到了:

awk 'BEGIN {FS=OFS=","} {if(NF==!1);gsub(/\=.*/,",")} 1'

但是无法使其适用于整个CSV。 任何提示表示赞赏。

2 个答案:

答案 0 :(得分:2)

如果您输入的内容在引号中从未包含逗号,则简单的sed脚本应该可以工作:

sed 's/=[^"]*;/=/g' file.csv

答案 1 :(得分:1)

能否请您关注awk,并告诉我这是否对您有帮助。

awk '{gsub(/=[^"]*;/,"=")} 1' Input_file

如果您要将输出保存到Input_file中,则也可以在上面的代码中附加> temp_file && mv temp_file Input_file