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 大师能指出我如何让​​这个脚本与我的列表一起工作,我将不胜感激!

电动汽车

4

3 回答 3

5
while IFS=, read field1 field2 field3
do
  echo $field1
  echo $field2
  echo $field3
done < list
于 2013-07-18T21:15:03.607 回答
3

可以用awk吗?

awk -F',' '{print "Field1: " $1 "\nField2: " $2 "\nField3: " $3}'
于 2013-07-18T21:16:34.137 回答
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
于 2013-07-18T21:16:41.550 回答