我正在嘗試按日期欄位對檔案進行排序。我意識到這已經完成,但是,我找不到具有以下日期格式的示例。
Canada Goose 1x03 For the Triumph of Evil Sep/30/2013
Rucksack 10x03 Everybody's Crying Mercy Oct/03/13
Test 4x01 Season 4, Episode 1 Jun/01/14
New Family 3x03 Double Date Oct/01/2013
我試過這個命令,但它不起作用
sort -t ' ' -k 4.8,4.11 -k 4.4M -k 4.1,4.2 -b Test.txt
uj5u.com熱心網友回復:
如果您安裝了 GNU awk,您可能想嘗試這種方法。
排序.awk
#!/bin/gawk -f
function convertToSeconds(date, fields) {
split(date, fields, /\//)
fields[1]=months[tolower(fields[1])]
fields[2]=sprintf("d", fields[2])
fields[3]=(length(fields[3]) == 2) ? sprintf("2d", fields[3]) : fields[3]
return mktime(sprintf("%s %s %s 00 00 00", fields[3], fields[1], fields[2]))
}
BEGIN {
FS="( \\ )"
months["jan"]="01"; months["feb"]="02"; months["mar"]="03"; months["apr"]="04"
months["may"]="05"; months["jun"]="06"; months["jul"]="07"; months["aug"]="08"
months["sep"]="09"; months["oct"]="10"; months["nov"]="11"; months["dec"]="12"
}
{
arr[convertToSeconds($4)]=$0
}
END {
asorti(arr, dst)
for(i=1; i<=FNR; i) {
print arr[dst[i]]
}
}
給它一個執行權限,然后運行它:
$ chmod x ./sort.awk
$ ./sort.awk Test.txt
要將更改保存到新檔案中,請附加此>運算子。
$ ./sort.awk Test.txt > SortedTest.txt
uj5u.com熱心網友回復:
** 更新 1 **
修改排序鍵以明確列出 4 位數年份作為前綴,以規避年終交叉問題
由于 OP 只想對日期欄位進行排序,因此根本不需要確切的 epochs 映射::
mawk '$ NF = 366 * ( (_=($3) % 100) 1900 100 * (_<50) ) \ int(_ * 10^8) ($2) (31) * \ (index(" JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", toupper($2)) / 3 - 1)'
23284 SEP 30 2013 201300737036
23285 OCT 1 2013 201300737038
23287 OCT 3 2013 201300737040
23541 JUN 14 2014 201400737293
第一列是原始日期生成順序(正確的排名順序),最后一列是計算的排序索引值 - 我測驗了從jan 1st 1950to 開始的每個日期dec 31 2025,這種簡單的方法對順序進行排序就好了,即使它不需要計算準確的儒略日期,或準確的閏年,
因為目標只是找到一種排序方法,該方法產生與精確紀元秒相同的排序輸出
uj5u.com熱心網友回復:
你快到了。sed例如,使用來添加缺少的世紀,然后M第二個欄位的選項KEYDEF與 GNU 一起使用sort:
sed 's:/\([0-9][0-9]\)$:/20\1:' << 'HERE' |
f1 f2 f3 NoV/30/15
f1 f2 f3 Sep/30/2013
f1 f2 f3 Oct/03/13
f1 f2 f3 Jun/01/14
f1 f2 f3 Oct/01/2013
f1 f2 f3 mAr/11/11
f1 f2 f3 oct/03/2013
f1 f2 f3 juL/17/1998
HERE
LC_ALL=C sort -t ' ' -k 4.9 -k 4.2M,4.4 -k 4.6,4.7
輸出:
f1 f2 f3 juL/17/1998
f1 f2 f3 mAr/11/2011
f1 f2 f3 Sep/30/2013
f1 f2 f3 Oct/01/2013
f1 f2 f3 Oct/03/2013
f1 f2 f3 oct/03/2013
f1 f2 f3 Jun/01/2014
f1 f2 f3 NoV/30/2015
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/510323.html
標籤:壳排序日期
上一篇:從檔案的創建日期查找天數
