Unix

回顯命令的問題?

  • May 24, 2012

我按照 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 日誌輸出它們,所以我做了一些替換來交換斜杠和冒號,用空格分隔日期和時間.

引用自:https://serverfault.com/questions/314823