2013-01-18 39 views
0

可能重複:
This script wont sort correctly by age如何在bash腳本中排序?

我absolutaly不知道如何得到這個腳本排序出生日期在Birthdays.csv的信息。 我知道sort -n命令,但是我希望通過DOB對文件birthdays.csv進行排序。我將如何去做這件事?

下面的腳本獲取用戶信息和出生日期,然後將這些信息放到一個名爲「birthday.csv」的文件中。

然後我需要按出生日期排序「birthdays.csv」,然後顯示這個新排序的信息。我還計算每個人在今天的日期的年齡。我遇到的問題是按出生日期排序birthdays.csv中的信息。有人能讓我知道我會怎麼做嗎?

下面的腳本是:

a=0 
while [ $a -lt 2 ]; 
do 
    echo Please enter a first name 
    read firstName 
    echo Please enter last name 
    read lastName 
    echo Please enter phone number 
    read phoneNumber 
    echo Please enter date of birth - format dd/mm/yyyy 
    read dob 
    echo "$firstName,$lastName,$phoneNumber,$dob" >> Birthdays.csv 
    echo If you would like to add another person press 1 or enter 2 to proceed 
    read a 
done 

    INPUT=./Birthdays.csv 
    OLDIFS=$IFS 
    IFS="," 
    [ -f ${INPUT} ] && while read Name Surname Telephone DOB 
    do 
        birthMonth=${DOB:0:2} 
        birthDay=${DOB:3:2} 
        birthYear=${DOB:6:4} 

        currentDate=`date +%d/%m/%Y` 

        currentMonth=${currentDate:0:2} 
        currentDay=${currentDate:3:2} 
        currentYear=${currentDate:6:4} 

        if [[ "$currentMonth" -lt "$birthMonth" ]] || [[ "$currentMonth" -eq "$birthMonth" && "$currentDay" -lt "$$birthDay" ]] 
        then 
          let Age=currentYear-birthYear-1 
        else 
          let Age=currentYear-birthYear 
        fi 

      echo "Name : $Name" 
      echo "Surname : $Surname" 
      echo "Telephone : $Telephone" 
      echo "DOB : $DOB" 
      echo "Age : $Age" 
      echo "##########################################" 
done < $INPUT 
IFS=$OLDIFS 
    echo $DATE 

exit 0; 
+0

[人排序](HTTP://linux.die .net/man/1/sort) – peteches

+0

我理解如何排序,但我希望按文件中每個人的年齡對文件進行排序。所以我真正想知道的是,如何通過文件內的某個人對文件進行排序? –

+0

@ChristianDiorHoward你幾乎會用'-k,--key = KEYDEF'(使用'-t,'作爲字段分隔符),但是在你選擇日期格式的dd/mm/yyyy時,它變得不平凡。 –

回答

1

添加此行

sort -o $INPUT -n -t , -k4.7,4 -k4.4,4.5 -k4.1,4.2 $INPUT 

INPUT=./Birthdays.csv 
0

嘗試 - ###貓Birthdays.csv |排序--field - 隔板= '/' --key = 3,5-