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:19date +"%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}' # 每分鐘抓一筆