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],,

관련 정보