MST
星途 面试题库

面试题:Bash字符串操作的性能优化与复杂逻辑实现

假设你有一个非常大的文本文件,每行包含一个字符串。在Bash脚本中,要对文件中的所有字符串执行以下操作:1. 对于每个字符串,判断其长度是否为奇数,如果是奇数,则删除字符串的中间字符。2. 然后对处理后的字符串进行排序,排序规则是先按字符串长度升序,长度相同的按字典序升序。3. 将排序后的字符串写入到一个新的文件中。请编写一个高效的Bash脚本实现上述功能,需要考虑性能优化。
17.0万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 临时文件,用于存储处理后的字符串
tmp_file=$(mktemp)

while read -r line; do
    len=${#line}
    if (( len % 2 != 0 )); then
        mid=$(( len / 2 ))
        line="${line:0:mid}${line:mid+1}"
    fi
    echo "$line" >> "$tmp_file"
done < input_file.txt

sort -n -k1.1,1.1 -k1.2,1.2 -o sorted_output.txt "$tmp_file"

rm "$tmp_file"

解释:

  1. mktemp 创建一个临时文件,用于存储处理后的字符串,避免多次读写大文件。
  2. while read -r line 逐行读取输入文件内容。
  3. 计算每行字符串长度 len=${#line},判断长度是否为奇数 (( len % 2 != 0 )),如果是奇数,删除中间字符。
  4. 将处理后的字符串写入临时文件。
  5. sort -n -k1.1,1.1 -k1.2,1.2 -o sorted_output.txt "$tmp_file" 对临时文件内容进行排序,先按字符串长度升序 -n -k1.1,1.1,长度相同的按字典序升序 -k1.2,1.2,并输出到新文件 sorted_output.txt
  6. 最后删除临时文件 rm "$tmp_file"

请将 input_file.txt 替换为实际的输入文件名,sorted_output.txt 替换为实际的输出文件名。