2015-08-08 22 views
0

我的問題是找人出席,但他已給他的日期兩次錯誤模式爲jul22,22jul。我想證明兩者是相同的。如何通過Shell腳本文件中只有號碼

attendF文件數據的模樣 -

PersonsName,month 
sriram,jul22 
sriram,22jul 

我的想法:首先,我要爲他在attendF文件
#grep -i "personName" attendF | cut -t"," -k2,2 > mnthFile

給出的幾個月格局mnth文件有像這樣的數據:

jul22 
jul23 
22jul 
jul24 
23 jul 

我想輸出是:
jul22
jul23
jul24
(或)
22jul
7月23日
jul24
有通過我能得到他的正確的出勤。

+0

你想要什麼輸出?爲什麼不像輸入mnthFile那樣輸入它? –

+0

現在我做了,thnq –

+0

這看起來像一個家庭作業問題或面試問題。到目前爲止,您嘗試過哪些方法無效? – Gene

回答

0

如果您要問如何將不同的日期規格化爲單一格式,以便您可以比較它們,下面的normalise函數(以及一個小測試工具)將爲您執行此操作。

它先小寫字符串,然後刪除所有既不是字母也不是數字的字符。

然後,如果它既不是alpha-number也不是number-alpha,它只是返回一個合適的錯誤值?

然而,假設它是這些格式之一,它也分爲一天,然後每月返回它在一個統一的格式:

#!/usr/bin/env bash 

normalise() { 
     # Lowercase it and remove non-alphanumerics. 

     str="$(echo "$1" | tr '[A-Z]' '[a-z]' | sed 's/[^a-z0-9]//g')" 

     # Check one of the allowed formats. 

     if [[ ! "${str}" =~ ^[0-9]+[a-z]+$ ]] ; then 
       if [[ ! "${str}" =~ ^[a-z]+[0-9]+$ ]] ; then 
         echo '?' 
         return 
       fi 
     fi 

     # Extract the day andd month, return normalised value. 

     day="$(echo "$str" | sed 's/[a-z]//g')" 
     mon="$(echo "$str" | sed 's/[0-9]//g')" 
     echo "${day}-${mon}" 
} 

echo $(normalise "Jul 22") 
echo $(normalise "jUl-22") 
echo $(normalise "juL22") 
echo $(normalise "Jul.22") 
echo $(normalise "22 jUl") 
echo $(normalise "22-juL") 
echo $(normalise "22Jul") 
echo $(normalise "22.jUl") 
echo $(normalise "22.jUl.1977") 

該腳本的輸出是:

22-jul 
22-jul 
22-jul 
22-jul 
22-jul 
22-jul 
22-jul 
22-jul 
?