用shell脚本,提取出包含 initcal 的行,删除方括号及里面的内容,并按 after 后面的时间大小重新对文本降序排序,最后在行首添加时间和单位
时间: 2024-03-27 16:41:15 浏览: 134
好的,以下是一个Shell脚本的示例,可以实现您的需求:
```bash
#!/bin/bash
# 提取出包含 initcal 的行,并删除方括号及里面的内容
initcal_lines=$(grep "initcall" input.txt | sed -e "s/\[.*\]//g")
# 提取出 after 后面的时间
time_dict=()
while read -r line; do
if [[ $line =~ after\ ([0-9]+)\ ([a-zA-Z]+) ]]; then
time=${BASH_REMATCH[1]}
unit=${BASH_REMATCH[2]}
time_dict[$line]="$time $unit"
fi
done <<< "$initcal_lines"
# 按时间大小排序
sorted_lines=$(for line in "${!time_dict[@]}"; do echo "$line"; done | sort -k2rn)
# 在行首添加时间和单位
result_lines=()
while read -r line; do
result_lines+=("${time_dict[$line]} $line")
done <<< "$sorted_lines"
# 将结果写入新的文件
printf '%s\n' "${result_lines[@]}" > output.txt
```
请将上述代码保存为Shell脚本文件,将文本文件命名为input.txt并放在与脚本相同的目录下,然后运行脚本即可。执行完毕后,将按时间大小降序排列的结果写入output.txt文件中。
阅读全文