2016-07-14 24 views
1

我輸入如何將時間從hh:mm:ss分割到unix中的hh mm ss?

./filename Apr 11 16 05:10:20 Jun 12 16 06:22:35 

我想我使用下面的函數轉換Apr 11 16 05:10:2016 04 11 05 10 20

convert_date_2() 
{ 
local months=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) 
local i 

for ((i=0; i<11; i++)) 
do 
[[ $1 = ${months[$i]} ]] && break 
done 
printf "%2d %02d %02d %02d %02d %02d \n" $3 $((i+1)) $2 $4 $5 $6 
} 

Start=$(convert_date_2 $1 $2 $3 $4) 
Stop=$(convert_date_2 $5 $6 $7 $8) 
echo $Start; 
echo $Stop; 

但我越來越像輸出和16 04 11 05 00 0016 06 12 06 00 00。其實我想要16 04 11 05 10 2016 06 12 06 22 35

我該如何修改?

回答

7

你可以簡單地用date命令本身來做。

date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S' 

測試:

$ date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S' 
16 04 11 05 10 20 

$ var_date="Jun 12 2016 06:22:35" 
$ date -d "$var_date" '+%y %m %d %H %M %S' 
16 06 12 06 22 35 

注:這裏,輸入的日期格式有一年201616

更新:

試試這個:

$ var_date="Jun 12 16 06:22:35" 
$ date -d "$(echo $var_date | awk '$3="20"$3')" '+%y %m %d %H %M %S' 

$ date -d "$(awk '$3="20"$3' <<< $var_date)" '+%y %m %d %H %M %S' 
+0

謝謝。但是我不能使用'2016',因爲我的日誌文件的年份格式爲'16'。我無法更改格式。有沒有可能在年份使用'16'?我如何將結果存儲在變量中?將開始= $(convert_date_2 $ 1 $ 2 $ 3 $ 4)'工作? – Vishwaroopa

+1

@Vishwaroopa,看我的更新。 – sat

+0

謝謝答案正常工作 – Vishwaroopa

1

您可以更改您的代碼如下:

convert_date_2() { 
    local months='JanFebMarAprMayJunJulAugSepOctNovDec' 
    local p="${months%$1*}" 
    printf "%2d %02d %02d %s\n" $3 $((${#p}/3 +1)) $2 "${4//:/ }" 
} 

start=$(convert_date_2 $1 $2 $3 $4) 
stop=$(convert_date_2 $5 $6 $7 $8) 
echo "start=$start" 
echo "sop=$stop" 

Code Demo

一個例子調用你的新功能:

convert_date_2 Apr 11 16 05:10:20 
16 04 11 05 10 20 
+0

Thanks.Can您可以解釋$ 3 $(($ {#p}/3 +1))$ 2「$ {4 //:/}」部分代碼嗎? – Vishwaroopa

+0

'$(($ {#p}/3 +1))'將'$ p'的長度除以3,然後對結果加'1'得到月份# – anubhava

相關問題