Date

Bash:按月,日對日期的CSV進行排序

  • March 29, 2020

我沒有成功地尋找解決這個問題的方法。

我有一個包含日期欄位的 CSV 文件,我試圖按月和日進行排序。

CSV 格式: name,email,phone,date

日期欄位格式m/d/yy 為 1/3/84

我可以按月排序

sort -t',' -n -k4 < $file`

但我不能把我的頭放在拆分日期欄位然後對 k1 和 k2 排序,如果這是有意義的或者甚至是遠端接近的話。

這顯然是錯誤的`

cat $file | sort -t',' -n -k4 | sort -t'/' -n -k1 -k2

因為輸出僅按天排序,並且 k1 包括第一個之前的所有內容/

期待學習,而不是被灌輸。

編輯:

CSV 樣本

Name,Email,Phone,Birthday
MarkW.,email@email.com,(555) 444-4444,6/24/85
GeorgeT.,email@email.com,(555) 555-1413,4/2/82
BobA.,email@email.com,(555) 555-5050,11/15/85
TimP.,email@email.com,,4/11/18
JohnM.,email@email.com,(555) 555-1317,4/25/13
MikeT.,email@email.com,(555) 555-2114,4/10/91
BobR.,email@email.com,(555) 555-1383,7/13/14
TomW.,email@email.com,(555) 555-1980,12/25/08
JamesS.,email@email.com,(555) 555-2150,6/12/15
TimC.,email@email.com,(555) 555-8048,3/17/08
WallyG.,email@email.com,,7/21/00
KeithD.,email@email.com,,12/29/12
DaveM.,email@email.com,,1/10/48
DanMc.,email@email.com,(555) 555-6863,5/19/88
DickM.,email@email.com,(555) 555-9333,11/23/13
KenB.,email@email.com,(555) 555-6891,1/2/04
DaveMc.,email@email.com,,
MichaelL.,email@email.com,(555) 555-1575,9/15/13
RoryB.,email@email.com,(555) 555-555,1/25/17

範例輸出,我能想出的最好的方法是使用

sort -t',' -n -k4 < $file

例如,預期輸出將是 1/10/84 出現在 04 年 1 月 2 日之後。

DaveMc.,email@email.com,,
Name,Email,Phone,Birthday
DaveM.,email@email.com,,1/10/48
KenB.,email@email.com,(555) 555-6891,1/2/04
RoryB.,email@email.com,(555) 555-555,1/25/17
TimC.,email@email.com,(555) 555-8048,3/17/08
GeorgeT.,email@email.com,(555) 555-1413,4/2/82
JohnM.,email@email.com,(555) 555-1317,4/25/13
MikeT.,email@email.com,(555) 555-2114,4/10/91
TimP.,email@email.com,,4/11/18
DanMc.,email@email.com,(555) 555-6863,5/19/88
JamesS.,email@email.com,(555) 555-2150,6/12/15
MarkW.,email@email.com,(555) 444-4444,6/24/85
BobR.,email@email.com,(555) 555-1383,7/13/14
WallyG.,email@email.com,,7/21/00
MichaelL.,email@email.com,(555) 555-1575,9/15/13
BobA.,email@email.com,(555) 555-5050,11/15/85
DickM.,email@email.com,(555) 555-9333,11/23/13
KeithD.,email@email.com,,12/29/12
TomW.,email@email.com,(555) 555-1980,12/25/08

它按月排序,但我也在嘗試按天排序

你可以用Miller做這樣的事情- 添加新的月份和日期欄位,按它們排序,然後刪除:

$ mlr --csvlite put '
   dmy = splitnv($Birthday,"/"); $m = dmy[1]; $d = dmy[2]
 ' then sort -n m,d then cut -x -f m,d file.csv
Name,Email,Phone,Birthday
KenB.,email@email.com,(555) 555-6891,1/2/04
DaveM.,email@email.com,,1/10/48
RoryB.,email@email.com,(555) 555-555,1/25/17
TimC.,email@email.com,(555) 555-8048,3/17/08
GeorgeT.,email@email.com,(555) 555-1413,4/2/82
MikeT.,email@email.com,(555) 555-2114,4/10/91
TimP.,email@email.com,,4/11/18
JohnM.,email@email.com,(555) 555-1317,4/25/13
DanMc.,email@email.com,(555) 555-6863,5/19/88
JamesS.,email@email.com,(555) 555-2150,6/12/15
MarkW.,email@email.com,(555) 444-4444,6/24/85
BobR.,email@email.com,(555) 555-1383,7/13/14
WallyG.,email@email.com,,7/21/00
MichaelL.,email@email.com,(555) 555-1575,9/15/13
BobA.,email@email.com,(555) 555-5050,11/15/85
DickM.,email@email.com,(555) 555-9333,11/23/13
TomW.,email@email.com,(555) 555-1980,12/25/08
KeithD.,email@email.com,,12/29/12
DaveMc.,email@email.com,,

引用自:https://unix.stackexchange.com/questions/576600