如何将文件的最后两行读入Bash中长度为2的数组?
How to read the last two lines of a file into an array of length two in Bash?
我正在尝试读取长度为 2 的数组中文件的最后两行。
考虑文件 a.txt
bar
second line
hello world
foo bar fubar
我试过了
lines=($(tail -n 2 a.txt))
但这会产生一个长度为 5 的数组,每个数组包含一个单词。我读了 post 但没能从那里读到最后两行。请注意,效率(执行时间)对我的需求很重要。
我正在 Mac OS X 使用终端 2.6.1
尝试关注一次,如果这对您有帮助,请告诉我。
array[0]=$(tail -2 Input_file | head -1)
array[1]=$(tail -1 Input_file)
输出如下。
echo ${array[0]}
hello world
echo ${array[1]}
foo bar fubar
为此,您可以使用 bash
中的 mapfile
命令。只需 tail
最后 2 行并将它们存储在数组中
mapfile -t myArray < <(tail -n 2 file)
printf "%s\n" "${myArray[0]}"
hello world
printf "%s\n" "${myArray[1]}"
foo bar fubar
查看有关 mapfile
builtin 和可用选项的更多信息。
如果 mapfile
由于一些旧版本的 bash
而无法使用,您可以只使用 read
命令和下面的过程替换
myArray=()
while IFS= read -r line
do
myArray+=("$line")
done < <(tail -n 2 file)
并像以前一样打印数组元素
printf "%s\n" "${myArray[0]}"
你可以这样使用它:
# read file in an array
mapfile -t ary < file
# slice last 2 elements
printf '%s\n' "${ary[@]: -2}"
如果你没有 mapfile
然后使用这个 while
循环来填充你的数组:
ary=()
while read -r; do
ary+=("$REPLY")
done < file
printf '%s\n' "${ary[@]: -2}"
输出:
hello world
foo bar fubar
我正在尝试读取长度为 2 的数组中文件的最后两行。
考虑文件 a.txt
bar
second line
hello world
foo bar fubar
我试过了
lines=($(tail -n 2 a.txt))
但这会产生一个长度为 5 的数组,每个数组包含一个单词。我读了 post
我正在 Mac OS X 使用终端 2.6.1
尝试关注一次,如果这对您有帮助,请告诉我。
array[0]=$(tail -2 Input_file | head -1)
array[1]=$(tail -1 Input_file)
输出如下。
echo ${array[0]}
hello world
echo ${array[1]}
foo bar fubar
为此,您可以使用 bash
中的 mapfile
命令。只需 tail
最后 2 行并将它们存储在数组中
mapfile -t myArray < <(tail -n 2 file)
printf "%s\n" "${myArray[0]}"
hello world
printf "%s\n" "${myArray[1]}"
foo bar fubar
查看有关 mapfile
builtin 和可用选项的更多信息。
如果 mapfile
由于一些旧版本的 bash
而无法使用,您可以只使用 read
命令和下面的过程替换
myArray=()
while IFS= read -r line
do
myArray+=("$line")
done < <(tail -n 2 file)
并像以前一样打印数组元素
printf "%s\n" "${myArray[0]}"
你可以这样使用它:
# read file in an array
mapfile -t ary < file
# slice last 2 elements
printf '%s\n' "${ary[@]: -2}"
如果你没有 mapfile
然后使用这个 while
循环来填充你的数组:
ary=()
while read -r; do
ary+=("$REPLY")
done < file
printf '%s\n' "${ary[@]: -2}"
输出:
hello world
foo bar fubar