我試圖將日誌文件的行輸入的日期與昨天的日期進行比較,如果差異超過一天,則會打印來自日誌文件的行。bash:如何在沒有日期的Solaris上比較兩個日期-d選項
日誌文件:
$more ActiveX2Alarms.log
2016-09-30 01:40:14 MET;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698;ET_AO_L_0165_abcde;major;2632
;lte.IK4009022;3;698
2016-11-01 08:10:51 MET;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698;ER_AO_L_4283_abcde;minor;2632;lte.IK4009022;3;698
2017-01-03 12:14:31 MET;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698;EM_AO_L_4065_
abcde;minor;2632;lte.IK4009022;3;698
我已經在Windows上使用Cygwin的創建測試環境。在Cygwin中,我成功了o/p。
這裏是初始代碼我使用:
awk -v d="$(date -d "yesterday" +'%Y-%m-%d %H:%M:%S')" '$1 " " $2 < d' /cygdrive/f/Script_X2/Final/Last_Trial/ActiveX2Alarms.log
結果:
2016-09-30 01:40:14 MET;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698;ET_AO_L_0165_abcde;major;2632
;lte.IK4009022;3;698
2016-11-01 08:10:51 MET;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698;ER_AO_L_4283_abcde;minor;2632;lte.IK4009022;3;698
然而主服務器上使用相同的命令時,我接收到一個錯誤:
date: illegal option --d
搜索對於我瞭解的錯誤與已安裝的Solaris軟件包相關的錯誤
$uname -a
SunOS xxxxxx 5.10 Generic_150400-15 sun4u sparc SUNW,SPARC-Enterprise
$date --version
date: illegal option -- version
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
$date --help
date: illegal option -- help
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
因此,我使用下面的代碼來避免這個問題,但它沒有給出任何輸出...所以有些東西仍然是錯誤的,請幫助!
$awk -v YESTERDAY="`TZ=GMT+20 date +'%d-%m-%Y %H:%M:%S'`" '$1 " " $2 < YESTERDAY' ActiveX2Alarms.log
awk: syntax error near line 1
awk: bailing out near line 1
$/usr/xpg4/bin/awk -v YESTERDAY="`TZ=GMT+20 date +'%d-%m-%Y %H:%M:%S'`" '$1 " " $2 < YESTERDAY' ActiveX2Alarms.log
$
要確認YESTERDAY變量賦值是成功的:
$YESTERDAY="`TZ=GMT+20 date +'%d-%m-%Y %H:%M:%S'`"; echo $YESTERDAY
02-01-2017 16:51:26
錯誤消息'awk:第1行附近的語法錯誤; awk:在第1行附近釋放意味着你正在調用舊的,破損的awk(Solaris上的/ usr/bin/awk)。切勿使用awk。在Solaris上,使用/ usr/xpg4/bin/awk代替第二個例子,或者甚至更好地安裝GNU awk(這就是你在cygwin上使用的),它有它自己的內建時間函數,然後你不需要亂七八糟與'日期'。 –
如果你在Solaris 11或更高版本,那麼你可以使用GNU date,它支持'-d'選項。這意味着使用'gdate'命令而不是'date'命令。如果您在早期的Solaris上,那麼您需要主動安裝GNU coreutils軟件包(包括GNU日期)。 – peterh