如何在数组中存储带空格的元素?

时间:2014-07-04 08:41:37

标签: arrays linux bash unix whitespace

只是想知道,假设我将数据存储在名为BookDB.txt的文件中,格式如下:

C++ for dummies:Jared:10.52:5:6 
Java for dummies:David:10.65:4:6

每个字段由分隔符"分隔:"。

我如何在第一个字段中保留空格并拥有一个包含以下内容的数组:(' C ++ for dummies'' Java for dummies')

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

只需使用while循环:

#!/bin/bash

# create and populate the array
a=()
while IFS=':' read -r field _
do
    a+=("$field")
done < file

# print the array contents
printf "%s\n"  "${a[@]}"

答案 1 :(得分:1)

我在第一次尝试回答时完全误解了你的问题。 awk似乎更适合你的需要。你可以通过简单的脚本获得你想要的东西:

IFS=$'\n' : MYARRAY=($(awk -F ":" '{print $1}' myfile))

-F标志强制:作为字段分隔符。

echo ${MYARRAY[0]}将打印:

C++ for dummies

答案 2 :(得分:1)

Ploutox的解决方案几乎是正确的,但是如果没有设置IFS,你将无法获得你所寻求的数组,在这种情况下有两个元素。

注意:他在这篇文章后纠正了他的解决方案。

 IFS=$'\n': arr=( $(awk -F':' '{print $1 }' Input.txt ) )
 echo ${#arr[@]}
 echo ${arr[0]}
 echo ${arr[1]}

输出:

2
C++ for dummies
Java for dummies

答案 3 :(得分:0)

$ yes sed -i "s/:/\'\'/" BookDB.txt | head -n100 | bash

这个命令在工作时。这是一个linux命令,在shell上用BookDB.txt

在相同的路径上运行它