Имам CSV файл, който анализирам в bash, който за една колона има повече от една стойност за някои редове. Например ред с множество стойности може да изглежда така
name,12,120,east,"sw1,sw2,sw3"
Но не всички редове го имат. Някои може да изглеждат като
name,10,141,west,sw5534a
Това, което се опитвам да направя, е ако тази колона има кавички в нея, да ги премахна и да задам променливата само на sw1,sw2,sw3
Съответни части от скрипта:
#!/bin/bash
INPUT=file.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read name building id region parents
do
echo "
....snip....
parents $parents"
Изходът, който искам за $parents, трябва да бъде sw1,sw2,sw3
, но в момента той изплюва като "sw1,sw2,sw3"
Опитах се да се забъркам със съвпадение на регулярен израз в условно, ако колоната има запетая, за да премахна първия и последните два знака, но не можах накарайте го да работи. Или ще премахне първото s
и последното 3
, или просто ще излезе грешка.
Всички предложения се оценяват!
awk
за анализиране на CSV файл вbash
скрипт. Не мисля, че можете да направите това правилно само сbash
. - person Barmar   schedule 02.01.2015read
. Това избягва да се налага да го записвате и възстановявате и също така избягва всякакви взаимодействия, които може да има в тялото на цикъла while:while IFS=, read name building id region parents
. Освен това на практика винаги искате да предоставите флага-r
наread
. - person rici   schedule 02.01.2015