我想将一个文件逐行读入脚本。文件中每一行都是由制表符分隔的多个值,我想将每一行读入一个数组。
典型的bash“逐行读取文件”的示例;
典型的bash“逐行读取文件”的示例;
while read line
do
echo $line;
done < "myfile"
然而对于我来说,myfile看起来是这样的(制表符分隔的值):
value1 value2 value3
value4 value5 value6
在循环的每次迭代中,我希望每行都进入一个数组中,以便我可以
while read line into myArray
do
echo myArray[0]
echo myArray[1]
echo myArray[2]
done < "myfile"
这将在第一次循环迭代中打印以下内容;value1
value2
value3
然后在第二次迭代中,它将会打印
value4
value5
value6
这个可行吗?我唯一能想到的方式是编写一个小函数手动分解值,Bash 中是否有内置支持呢?
echo "${myArray[1]}"
和echo "${myArray[2]}"
,它仍然会给出相同的输出。 - Ahmed Husseinecho
会添加一个换行符,而OP肯定不会混淆输出是否在正确的位置有换行符--但如果你有类似但不同的情况,我邀请你发布自己的问题,并提供足够的细节让别人帮助你。(如果你在这里评论你的问题链接,我会看一下。) - ruakhIFS= read -r line
),然后使用readarray
将该变量“分割”成一个数组:readarray -d $'\t' -t myArray < <(printf %s "$line")
。(注意:使用< <(printf %s "$line")
而不是<<<"$line"
的原因是后者会添加一个换行符,这个换行符会被包含在最后一个字段中。) - ruakh