Linux脚本时间差计算及日志条件导出需求问询
Hey there! Let's work through this problem together. I see you're stuck on calculating the time difference between your log file's last modification time and the current time—let's fix that first, then put the whole script together.
核心问题:时间差计算的正确方式
Your earlier attempt using awk -F '|' '{print$2 - $1}' didn't work because you were trying to subtract two date strings directly. Awk treats non-numeric strings as 0 in arithmetic operations, which is why you got 0 as a result. Instead, we need to convert dates into Unix timestamps (seconds since the Unix epoch) to do accurate arithmetic.
步骤1:获取时间戳
- Current time as timestamp: Use
date +%s(this gives you the number of seconds since 1970-01-01 00:00:00 UTC) - Log file's last modification time as timestamp: Use
stat -c %Y your_log_file(the-c %Yflag tellsstatto output just the modification time in timestamp format)
步骤2:计算时间差并判断是否超过60分钟
Once we have both timestamps, subtract the file's modification time from the current time to get the difference in seconds. 60 minutes equals 3600 seconds, so we check if the difference is greater than that.
完整脚本实现
Here's a bash script that puts it all together. Replace your_log_file with your actual log filename, and output_file with the file you want to write the 3rd column to:
#!/bin/bash # Define your files LOG_FILE="your_log_file" OUTPUT_FILE="output_file" # Get current time and file modification time in seconds (Unix timestamp) CURRENT_TIME=$(date +%s) FILE_MTIME=$(stat -c %Y "$LOG_FILE") # Calculate time difference in seconds TIME_DIFF=$((CURRENT_TIME - FILE_MTIME)) # 60 minutes = 3600 seconds if [ "$TIME_DIFF" -gt 3600 ]; then # Extract the 3rd column (delimited by |) and append to output file awk -F '|' '{print $3}' "$LOG_FILE" >> "$OUTPUT_FILE" echo "3rd column content written to $OUTPUT_FILE" else echo "File was modified within the last 60 minutes—no action taken." fi
额外说明
- If you're on macOS, the
statcommand syntax is a bit different: usestat -f %m "$LOG_FILE"instead ofstat -c %Y "$LOG_FILE"to get the modification timestamp. - The
>>operator appends to the output file; if you want to overwrite it each time, use>instead.
内容的提问来源于stack exchange,提问作者osia6028

