假设我有一个文本文件'demo.txt',其中包含一个表格,如下所示:
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
现在,我想在bash中使用'readarray'命令分别读取每一行,所以我写道:
readarray myarray < demo.txt
Run Code Online (Sandbox Code Playgroud)
问题是它不起作用.如果我尝试打印'myarray':
echo $myarray
Run Code Online (Sandbox Code Playgroud)
我明白了:
1 2 3
Run Code Online (Sandbox Code Playgroud)
另外,如果我写:
echo ${myarray[1]}
Run Code Online (Sandbox Code Playgroud)
我明白了:
4 5 6
Run Code Online (Sandbox Code Playgroud)
代替:
2
Run Code Online (Sandbox Code Playgroud)
正如我所料.这是为什么?如何分别访问每一行并在该行中访问每个成员?
dam*_*ois 17
这是预期的行为.readarray
将创建一个数组,其中数组的每个元素都是输入中的一行.
如果要查看整个阵列,则需要使用
echo "${myarray[@]}"
Run Code Online (Sandbox Code Playgroud)
因为echo "$myarray
只会输出myarray[0]
,而且${myarray[1]}
是数据的第二行.
你在寻找的是一个二维数组.比如看看这个.
如果你想要一个包含第一行内容的数组,你可以这样做:
$ read -a arr < demo.txt
$ echo ${arr[0]}
1
$ echo ${arr[1]}
2
$ echo ${arr[2]}
3
Run Code Online (Sandbox Code Playgroud)
readarray rows < demo.txt
for row in "${rows[@]}";do
row_array=(${row})
first=${row_array[0]}
echo ${first}
done
Run Code Online (Sandbox Code Playgroud)
为了扩展达米安的答案(因为我还不能提交评论......),你只需迭代阅读即可。我的意思是类似下面的内容
exec 5<demo.txt
for i in `seq 1 ${numOfLinesInFile}`
do
read -a arr -u 5
for j in `seq 0 ${numOfColumnsMinus1}`
do
echo ${arr[$j]}
done
done
Run Code Online (Sandbox Code Playgroud)
我希望你已经找到了解决方案(抱歉打扰了......)。我在帮助教导朋友时偶然发现了此页面,并认为其他人也可能会这样做。