2013-07-18 9 views
6

私はそうのようにカンマで区切られているリスト...バッシュ:特殊文字をカンマで分割さ

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 

私はこれらの行をループしようとし、各行に3列を持つ変数を移入していますがあります。私のスクリプトは、データにスペース、アンパサンド、またはアポストロフィがない場合に機能します。それはそれらを持っているときそれは正しく動作しません。ここに私のスクリプトは次のとおりです。

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

あなたの一つは達人が、私はそれを非常に感謝し、このスクリプトは私のリストで動作するように取得することができますどのように指摘することができますbashの場合は!

はEV

答えて

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

これは素晴らしい仕事をスライスし、配列を使用して!どうも! – exvance

3

あなたはawkを使用することはできますか?

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

Do not read lines with a for loop.使用read代わり

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

あるいは、

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