/ / Разграничаващ низ в bash, игнорирайки разделителите в кавички - bash

Ограничаване на низа в bash игнориране на разделители в кавички - bash

Не предполагам, че има начин да накарам тази команда да игнорира запетаята в кавички (между "трите")?

$ echo "one,two,"three,three",four" | { IFS="," read -a array; echo ${#array[@]}; }
5

Nb. echo ${#array[@]} отчита дължината на масива ..

Отговори:

2 за отговор № 1

Използвайки FPAT в gnu-awk можете да го направите:

str="one,two,"three,three",four"

awk -v FPAT=""[^"]*"|[^,]*" "{
print "# of columns: " NF; for(i=1; i<=NF; i++) print "Field #", i, ":", $i
}" <<< "$str"

изход:

# of columns: 4
Field # 1 : one
Field # 2 : two
Field # 3 : "three,three"
Field # 4 : four

1 за отговор № 2

Избягайте от запетая:

echo "one,two,"three,three",four"

Резултат:

$ echo "one,two,"three,three",four" | { IFS="," read -a array; echo ${#array[@]} ${array[2]}; }
4 "three,three"