MST

星途 面试题库

面试题:Bash数组在实际场景中的应用

假设你有一个文本文件,每行包含一个文件名及其对应的文件大小(以字节为单位),格式为'文件名 大小'。编写一个Bash脚本,读取该文件,将文件名存储在一个数组中,将文件大小存储在另一个数组中。然后找出文件大小最大的文件,并输出其文件名和大小。要求尽可能高效地实现,并考虑处理大文件的情况。
32.6万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

file_name_array=()
file_size_array=()

while read -r line; do
    filename=$(echo $line | awk '{print $1}')
    filesize=$(echo $line | awk '{print $2}')
    file_name_array+=("$filename")
    file_size_array+=("$filesize")
done < your_file.txt

max_index=0
for ((i = 1; i < ${#file_size_array[@]}; i++)); do
    if (( ${file_size_array[i]} > ${file_size_array[max_index]} )); then
        max_index=$i
    fi
done

echo "文件名: ${file_name_array[max_index]}, 大小: ${file_size_array[max_index]}"

在上述脚本中:

  1. 初始化两个空数组 file_name_arrayfile_size_array 用于存储文件名和文件大小。
  2. 使用 while read -r line 逐行读取文本文件,通过 awk 分别提取文件名和文件大小,并存储到对应的数组中。
  3. 通过遍历文件大小数组,找到最大文件大小对应的索引 max_index
  4. 最后输出文件名和最大文件大小。

这种方式逐行读取文件,适合处理大文件,不会占用过多内存。your_file.txt 为实际存储文件名和大小的文本文件名,需根据实际情况替换。