Linux 如何在bash脚本中排序?

Linux 如何在bash脚本中排序?,linux,bash,shell,unix,Linux,Bash,Shell,Unix,可能重复: 我完全不知道如何让这个脚本按出生日期对Birthdays.csv中的信息进行排序。 我知道sort-n命令,但是我希望按照DOB对文件birthdays.csv进行排序。我该怎么做呢 下面的脚本获取用户信息和出生日期,然后将这些信息放入名为“birth.csv”的文件中 然后我需要按出生日期对“birthdays.csv”进行排序,然后显示新排序的信息。我还计算到今天每个人的年龄。我遇到的问题是按出生日期对birthdays.csv中的信息进行排序。有人能告诉我怎么做吗 脚本如下:

可能重复:

我完全不知道如何让这个脚本按出生日期对Birthdays.csv中的信息进行排序。 我知道sort-n命令,但是我希望按照DOB对文件birthdays.csv进行排序。我该怎么做呢

下面的脚本获取用户信息和出生日期,然后将这些信息放入名为“birth.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;
a=0
而[$a-lt 2];
做
请输入您的名字
读名字
请输入姓氏
读姓氏
请输入电话号码
读取电话号码
echo请输入出生日期-格式为dd/mm/yyyy
读dob
echo“$firstName,$lastName,$phoneNumber,$dob”>>Birthdays.csv
如果要添加其他人员,请按1或输入2继续
读一本
完成
输入=./Birthdays.csv
OLDIFS=$IFS
IFS=“,”
[-f${INPUT}]&&while读名字姓氏电话号码
做
生日=${DOB:0:2}
生日=${DOB:3:2}
生日=${DOB:6:4}
currentDate=`date+%d/%m/%Y`
currentMonth=${currentDate:0:2}
currentDay=${currentDate:3:2}
currentYear=${currentDate:6:4}
如果[[“$currentMonth”-lt“$birthMonth”].[[“$currentMonth”-eq“$birthMonth”&&“$currentDay”-lt“$$birthMonth”]]
然后
让年龄=当前年份-出生年份-1
其他的
让年龄=当前年份生日
fi
echo“Name:$Name”
echo“姓氏:$姓氏”
echo“电话:$Telephone”
回声“DOB:$DOB”
回声“年龄:$Age”
在现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方######”
完成<$INPUT
IFS=$OLDIFS
echo$日期
出口0;
尝试--####cat Birthdays.csv |排序--字段分隔符='/'--key=3,5

添加此行

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

INPUT=./Birthdays.csv

我知道如何排序,但我希望按照文件中每个人的年龄对文件进行排序。因此,我真正想知道的是,如何根据文件中的某个人对文件进行排序?@ChristianDiorHoward您几乎可以使用
-k,--key=KEYDEF
(使用
-t,
作为字段分隔符),但如果您选择dd/mm/yyyy作为日期格式,它就变得不那么简单了。似乎需要一些标志的魔力。。。论坛讨论中有很多可能与你的需求相关的信息。这不是重复的,脚本已经更改