2013-07-18 9 views
6

mam listy, który jest rozdzielany przecinkami jak tak ...Bash: Split przecinkiem ze znakami specjalnymi

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 

Próbuję pętli nad tymi liniami i wypełnić zmienne z 3 kolumn w każdym wierszu . Mój skrypt działa, gdy dane nie zawierają spacji, znaków ampersands lub apostrofów. Kiedy ma takie, to nie działa poprawnie. Oto mój skrypt:

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

Jeśli ktoś z was bash guru może wskazać w jaki sposób mogę uzyskać ten skrypt do pracy z mojej listy będę bardzo wdzięczny!

EV

Odpowiedz

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

To było wspaniałe! dzięki! – exvance

3

można używać awk?

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

Do not read lines with a for loop. Użyj opcji read zamiast

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

Lub przy tablicy krojenie

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