Bash: 使用特殊字符逗号进行拆分

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
3个回答

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

3

不要使用for循环读取行。 使用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

3
你能使用awk吗?
awk -F',' '{print "Field1: " $1 "\nField2: " $2 "\nField3: " $3}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接