Bash select CSV 列中有多个值

Bash select multiple values in CSV column

我有以下 CSV 格式:

"/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"

我想从每一列中提取 2 个值,数组中的第一个值和最后一个值,在“=”之后,如下所示:

"/opt=920MB;4855","/=4244MB;6359","/tmp=408MB;1109","/var=789MB;1859","/boot=53MB;729"

每列可以这样工作:

echo "$string" | awk 'BEGIN{FS=OFS=";"} {split([=12=],a,";"); print a[1],a[5]}'
/opt=920MB;4855

非常感谢任何提示。

s/\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*/;;;;;;;;;/

使用 sed 找到解决方案:

echo "$string"| sed 's/=*;[^"]*;/,/g'

你可以不用 sed 那样做:

xargs -d"\"" -n 1 -a file.csv | xargs -d";" | awk '/ key (start|stop) / {next} {if (match([=10=],"/")) printf("\"%s;%s\",",,$NF)} END {print ""}' |  rev | cut -c 2- | rev