写一个shell脚本。依次检查当前目录及所有子目录下面的log文件,找到第一个包含555555的行,如果没有就不再检查当前文件。找到一个555555行后,检查此行到未见尾的所有行,如果某一行中出现Timing violation,记录当前行号。增加输出到文件check.log,输出内容包含文件路径以及出现Timing violation的行号将当前行的内容输出到check.log下一行,并且echo显示文件名+行号。注意每次输出check.log不是覆盖而是增加,check.log保存在当前目录。
时间: 2024-02-11 19:04:05 浏览: 74
Shell脚本实现从文件夹中递归复制文件
以下是一个实现上述功能的shell脚本:
```sh
#!/bin/bash
# 递归检查目录及子目录下的log文件
find . -name '*.log' | while read log_file; do
echo "Checking ${log_file}..."
# 检查文件中是否包含555555
if ! grep -q '555555' "${log_file}"; then
echo "No 555555 found in ${log_file}"
continue
fi
# 找到包含555555的行后,检查此行到文件尾的所有行
line_num=$(grep -n '555555' "${log_file}" | head -n 1 | cut -d: -f1)
tail -n +${line_num} "${log_file}" | while read line; do
# 如果某一行中出现Timing violation,记录当前行号
if echo "${line}" | grep -q 'Timing violation'; then
echo "${log_file}:${line_num}: ${line}" >> check.log
echo "${log_file}:${line_num}: ${line}"
break
fi
line_num=$((line_num + 1))
done
done
```
脚本的大概思路是先使用`find`命令递归查找当前目录及子目录下的所有log文件,然后对于每个log文件,检查是否包含555555,如果不包含就跳过,否则找到包含555555的第一行,然后逐行检查此行到文件尾的所有行,如果某一行中出现了Timing violation,就记录当前行号并输出到check.log文件,同时在屏幕上输出文件名和行号。注意输出到check.log文件是追加而不是覆盖。
阅读全文