Bash:用逗号分隔特殊字符

时间:2013-07-18 21:11:44

标签: bash

我有一个逗号分隔的列表......

 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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

你能用awk吗?

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

答案 2 :(得分: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