我有一個場景,我在檔案中有以下資料 需要根據日期列進行排序,第一行是標題,它不應該被排序
。NAME|AGE|COURSE|DATES
v1|31|MC|12 July 2019
v2|33|MB|2019年7月4日
v3|12|GG|2019年7月13日
v4|21|JJ|2019年7月7日
我的代碼 :
sort -n -k k4 /d/file.txt
上面這段代碼沒有對我的資料進行排序
預期輸出 : v4|21|JJ|7 July 2019 v2|33|MB|2019年7月4日 v1|31|MC|12 July 2019 v3|12|GG|2019年7月13日uj5u.com熱心網友回復:
這樣做的方法是使用命令分組,你可以從輸入流中提取頭,列印它,并消耗剩余的資料:
{
IFS= read -r header
echo "$header"。
排序 ...
} < file.txt
然而,用這種格式對日期進行排序是很棘手的。以下是你必須做的,以便輸出按時間順序排序。這假定了GNU排序:
$ cat file.txt # I added a couple of extra records
姓名|年齡|課程|日期
v1|31|MC|12 JUL 2019
v2|33|MB|2019年7月4日
v3|12|GG|13 JUL 2019
v4|21|JJ|2019年7月7日
11|22|33|2020年7月1日
aa|bb|cc|10 AUG 2019
$ {
IFS= read -r header
echo "$header"。
sort -t'|' -n -s -k4 | sort -M -s -k 2,2 | sort -n -s -k 3,3
} < file.txt
姓名|年齡|課程|日期
2019年7月2日-33日-MB-4日
v4|21|JJ|2019年7月7日
馮小剛:2019年7月12日
v3|12|GG|13 JUL2019
2019年8月10日,Aa|bb|cc|10 AUG2019
11|22|33|1 JUL 2020
這使用了GNU排序 "stable "選項,因此你首先按日排序,然后按月排序,最后按年排序。
uj5u.com熱心網友回復:
借用@glennjackman的輸入樣本,這將使用任何版本的強制性Unix工具awk、sort和cut:
$ awk '
begin { fs="|"; ofs=" " }
{
split($NF,d," " )
mthNr = (index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",d[2]) 2) /3
print (NR>1), d[3], mthNr, d[1], NR, $0
}
' file.txt|
排序 -k1,1n -k2,2n -k3,3n -k4,4n -k5,5n|| -k1,1n
剪切 -f6-
姓名|年齡|課程|日期
2019年7月4日---33日---MB
v4|21|JJ|2019年7月7日
v1|31|MC|2019年7月12日
V3|12|GG|13 JUL2019
2019年8月10日,Aa|bb|cc|10 AUG2019
11|22|33|1 JUL 2020
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/318324.html
標籤:
