Unix
回顯命令的問題?
我按照 quanta 的建議執行這個腳本
#!/bin/bash EDATE=$(tail -1 a | awk '{ print substr($4, 2, length($4)) }') EEPOCH=$(date -d "$(echo "$EDATE" | awk 'BEGIN { FS = "[/:]"; } \ { print $1" "$2" "$3" "$4":"$5":"$6 }')" +%s) time=$(expr 60 \* 60 \* 24 \* 5) SEPOCH=$(expr $EEPOCH - $time) while read line do DATE=$(echo $line | awk '{ print substr($4, 2, length($4)-1) }' | \ awk 'BEGIN { FS = "[/:]"; } { print $1" "$2" "$3" "$4":"$5":"$6 }') DEPOCH=$(date -d "$DATE" +%s) [[ $DEPOCH -ge $SEPOCH && $DEPOCH -le $EEPOCH ]] && echo $line | \ awk '{ print substr($4, 2, length($4)) }' >> as1 done < a
我檢查了一下,您的腳本似乎想逐行檢查日誌文件。由於它有超過 14000 個項目,因此需要很多。因此,當我執行它時,游標會轉到下一行和下一行,我應該按 14000 次,以便檢查整個日誌文件!不可能!我認為它只適用於短日誌文件。問題是因為while嗎?
這一個班輪(為了清楚起見,我將其分開)應該給你同樣的結果。您可以選擇添加
> as1
到末尾以將輸出重定向到文件。將路徑放入我放置的 apache 日誌文件<logfile>
for d in \ $(sed -nre 's/.*\[(..)\/(...)\/(....):(..:..:..) .*/\1 \2 \3 \4/p' <logfile> | date +%s -f-); do echo $[ $d - 86400 * 5]; done
該
date
命令不需要明確的 UTC 格式日期作為-d
參數,雖然它不理解日期,因為 apache 日誌輸出它們,所以我做了一些替換來交換斜杠和冒號,用空格分隔日期和時間.