面试题答案
一键面试#!/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"
解释:
mktemp
创建一个临时文件,用于存储处理后的字符串,避免多次读写大文件。while read -r line
逐行读取输入文件内容。- 计算每行字符串长度
len=${#line}
,判断长度是否为奇数(( len % 2 != 0 ))
,如果是奇数,删除中间字符。 - 将处理后的字符串写入临时文件。
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
。- 最后删除临时文件
rm "$tmp_file"
。
请将 input_file.txt
替换为实际的输入文件名,sorted_output.txt
替换为实际的输出文件名。