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
我有以下 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