2013-07-18 13 views
6

Ho una lista che è delimitato da virgole in questo modo ...Bash: raggruppati per virgola con caratteri speciali

00:00:00:00:00:00,Bob's Laptop,11111111111111111 
00:00:00:00:00:00,Mom & Dad's Computer,22222222222222222 
00:00:00:00:00:00,Kitchen,33333333333333333 

Sto cercando di ciclo su queste linee e popolare variabili con le 3 colonne in ogni riga . Il mio script funziona quando i dati non hanno spazi, e commerciali o apostrofi. Quando ce l'ha, allora non funziona bene. Ecco il mio script:

for line in $(cat list) 
do 
    arr=(`echo $line | tr "," "\n"`) 
    echo "Field1: ${arr[0]}"  
    echo "Field2: ${arr[1]}" 
    echo "Field3: ${arr[2]}" 
done 

Se uno di voi bash guru può notare come posso ottenere questo script per lavorare con la mia lista sarei molto grato!

EV

risposta

5
while IFS=, read field1 field2 field3 
do 
    echo $field1 
    echo $field2 
    echo $field3 
done < list 
+0

questo ha funzionato grande! grazie! – exvance

3

Potete usare awk?

awk -F',' '{print "Field1: " $1 "\nField2: " $2 "\nField3: " $3}' 
3

Do not read lines with a for loop. Usa read invece

while IFS=, read -r -a line; 
do 
    printf "%s\n" "${line[0]}" "${line[1]}" "${line[2]}"; 
done < list 

Oppure, con un array affettare

while IFS=, read -r -a line; 
do 
    printf "%s\n" "${line[@]:0:3}"; 
done < list