如何编写Bash脚本比较两个文件第13行的GMT格式日期大小
Bash 对比两个文件指定行日期先后的实现方案
实现思路
- 首先提取两个文件的第13行日期字符串
- 调用
date命令将人类可读的日期格式转换为Unix 时间戳(从1970年1月1日0点起的总秒数,数值越大代表时间越晚) - 直接比较两个时间戳的数值大小即可判断日期先后
完整脚本示例
#!/bin/bash # 传入两个文件路径作为参数 file1="$1" file2="$2" # 检查参数数量是否正确 if [ $# -ne 2 ];then echo "用法:$0 <文件1路径> <文件2路径>" exit 1 fi # 检查文件是否存在 if [ ! -f "$file1" ] || [ ! -f "$file2" ];then echo "错误:请传入有效的文件路径" exit 1 fi # 提取两个文件第13行的内容 date1=$(sed -n '13p' "$file1") date2=$(sed -n '13p' "$file2") # 转换为Unix时间戳(GNU date 写法,适用于绝大多数Linux发行版) ts1=$(date -d "$date1" +%s) ts2=$(date -d "$date2" +%s) # 如果你使用的是macOS(BSD date),请把上面两行替换为下面的写法: # ts1=$(date -jf "%b %e %H:%M:%S %Y GMT" "$date1" +%s) # ts2=$(date -jf "%b %e %H:%M:%S %Y GMT" "$date2" +%s) # 比较时间戳判断先后 if [ $ts1 -gt $ts2 ];then echo "文件1的第13行日期更晚(更大)" elif [ $ts1 -lt $ts2 ];then echo "文件2的第13行日期更晚(更大)" else echo "两个文件的第13行日期完全一致" fi
使用方法
给脚本添加执行权限后直接传入两个文件路径运行即可:
chmod +x compare_date.sh ./compare_date.sh 文件1路径 文件2路径
注意事项
- 若文件第13行除了目标日期外还有其他内容,可在提取后通过
grep、awk等命令先过滤出日期字符串再做转换 - 不同系统的
date命令语法存在差异,脚本已经标注了Linux和macOS两套写法,请根据你的运行环境选择
内容的提问来源于stack exchange,提问作者Sai Priya
相关产品推荐
相关产品推荐

