Bash:月、日ごとにCSVを並べ替える

Bash:月、日ごとにCSVを並べ替える

私はこの問題に対する解決策を探していましたが、成功しませんでした。

毎月、日ごとに並べ替える日付フィールドを含む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 protected],(555) 444-4444,6/24/85
GeorgeT.,[email protected],(555) 555-1413,4/2/82
BobA.,[email protected],(555) 555-5050,11/15/85
TimP.,[email protected],,4/11/18
JohnM.,[email protected],(555) 555-1317,4/25/13
MikeT.,[email protected],(555) 555-2114,4/10/91
BobR.,[email protected],(555) 555-1383,7/13/14
TomW.,[email protected],(555) 555-1980,12/25/08
JamesS.,[email protected],(555) 555-2150,6/12/15
TimC.,[email protected],(555) 555-8048,3/17/08
WallyG.,[email protected],,7/21/00
KeithD.,[email protected],,12/29/12
DaveM.,[email protected],,1/10/48
DanMc.,[email protected],(555) 555-6863,5/19/88
DickM.,[email protected],(555) 555-9333,11/23/13
KenB.,[email protected],(555) 555-6891,1/2/04
DaveMc.,[email protected],,
MichaelL.,[email protected],(555) 555-1575,9/15/13
RoryB.,[email protected],(555) 555-555,1/25/17

出力例、私が考えることができる最高の使用

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

たとえば、予想される出力は 1/10/84 で、1/2/04 以降に発生します。

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

月別に並べ替えもできますが、日別に並べ替えもしてみました

ベストアンサー1

あなたはこのようなことをすることができますミラー- 新しい月と日のフィールドを追加して並べ替えてから削除します。

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

おすすめ記事