X

Bash shell 的 date 印出「年月日時分秒」的參數

Linux 的 Bash Shell 很常會使用到 date 的命令,特別是用到備份、某些固定時間該做的處理等等,參數是哪些呢?

每次都是去 man date 來查看這個參數(因為會有大小寫不同,24hr、前面補0 等不同),在此紀錄最常用的年月日參數,並把跟 awk 搭配的方式列出來。

Bash shell 的 date 印出「年月日時分秒」的參數

date 要印出指定格式,需要用 +"格式" 來達成,ex:date +"%Y-%m-%d",下述為幾個常用的範例

日期對 timestamp 正反向處理

  • date 要印出 timestamp:
    • $ date +"%s"
  • date 要依照 timestamp 印出內容:
    • $ date --date='@2147483647' # 2147483647 請取代成自己要用的 timestamp 數值
    • $ date +"%F %T" --date='@2147483647' # 依照指定格式印出

date 日期:年月日 時分秒

日期:年月日 時分秒,常用的是下述:

  • 年-月-日
  • 時:分:秒

於 date 有標準自己組的參數,也有簡便的參數來達成

  • 年-月-日:%F%Y-%m-%d
  • 時:分:秒:%T%H:%M:%S

範例

  • date +"%F %T"
    2017-04-18 17:58:19
  • date +"%Y-%m-%d %H:%M:%S"
    2017-04-18 17:58:19

date 秀 1分鐘前的資料

  • date +"%H:%M" --date="-1 min"

AWK 要印出 date 查看目前時間

awk 可以使用 -v 的參數將變數帶入使用,語法:-v date="$(date +"%F %T")"

  • tail -1000 access.log | awk '{print $1}' | awk -v date="$(date +"%F %T")" '{print date, $1}' # 印出 "年-月-日 時:分:秒 IP"

假設 Log 有存 花費時間的數字(elapsed),要算出平均值的話

  • tail -1000 access.log | awk -F elapsed= '{print $2}' | sed 's/s//' | awk '{total += $1} END {print total / NR}'

假設 Log 有存 花費時間的數字(elapsed),算出平均值還要加上時間

  • tail -1000 access.log | awk -Felapsed= '{print $2}' | sed 's/us//' | awk -v date="$(date +"%F %T")" '{total += $1} END {print date, total / NR}'
  • tail -1000 access.log | grep `date +":%H:%M:" --date="-1 min"` | awk -Felapsed= '{print $2}' | sed 's/us//' | awk -v date="$(date +"%F %T")" '{total += $1} END {print date, total / NR}' # 每分鐘抓一筆

相關網頁

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post