CSV多列中的Bash替换

CSV多列中的Bash替换,bash,awk,sed,Bash,Awk,Sed,我有以下CSV格式: 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

我有以下CSV格式:

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'
只是字符串,我设法用:

string="/opt=920MB;4512;4917;0;4855"
echo $string | awk '{split($0,a,";"); print a[1],a[5]}' | sed 's#=.* #=#'
/opt=4855
但无法使其在整个CSV中工作。
任何提示都非常感谢。

如果您的输入在引用的字段中从未包含逗号,那么简单的sed脚本应该可以工作:

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

请您试试下面的
awk
,如果这对您有帮助,请告诉我

awk '{gsub(/=[^"]*;/,"=")} 1' Input_file
如果您想将输出保存到输入文件中,请在上述代码中附加
>临时文件和&mv临时文件输入文件