Linux Bash在CSV列中选择多个值

Linux Bash在CSV列中选择多个值,linux,bash,devops,Linux,Bash,Devops,我有以下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个值,第一个值和最后一个值位于“=”之后,如下所示: echo "$string" | awk 'BEGIN{FS=OFS=";"} {split($0,a,";"); p

我有以下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个值,第一个值和最后一个值位于“=”之后,如下所示:

echo "$string" | awk 'BEGIN{FS=OFS=";"} {split($0,a,";"); print a[1],a[5]}'
/opt=920MB;4855
“/opt=920MB;4855”、“/=4244MB;6359”、“/tmp=408MB;1109”、“/var=789MB;1859”、“/boot=53MB;729”

每列的工作原理如下:

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

非常感谢任何提示。

使用sed找到了解决方案:

s/\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*\([^;]*\);\([^;]*\)\[^"]*/\1;\2;\3;\4;\5;\6;\7;\8;\9;\10/

echo“$string”| sed的/=*;[^“]*;/,/g'

您可以通过这种方式在没有sed的情况下完成:

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

你的上一个问题是什么-。这不可行吗?这不同于那一个,这是从每列中获取两个值,而不是一个。嗨,欢迎使用堆栈溢出。虽然这个答案可能令人惊讶,但请你详细说明一下,并解释一下为什么这会回答这个问题。