dd/mm/yyyy로 저장된 날짜를 포함하여 csv의 여러 열 정렬

dd/mm/yyyy로 저장된 날짜를 포함하여 csv의 여러 열 정렬

csv에 저장된 데이터를 정렬하려고합니다.

내 데이터는 다음과 같습니다.

name,date,time
DEF,01/02/2021,06:00
HIJ,31/01/2021,07:50
ABC,01/02/2021,05:50

*(날짜는 dd/mm/yyyy로 저장됩니다)

이름, 날짜, 시간순으로 정렬하려고 하는데 다양한 조합을 시도해 보았지만 알 수 없습니다.

이름을 사용하여 오름차순으로 정렬 sort -t, -k1 -k2,3 -u >> $report하지만 나머지 두 열에 대해 동일한 결과를 얻을 수 없습니다.

고쳐 쓰다:미안, 하루가 다 지났는데 왜 테이블을 썼는지 모르겠어

답변1

밀러(https://github.com/johnkerl/miller), 그리고

name,date,time
DEF,01/02/2021,06:00
HIJ,31/01/2021,07:50
ABC,01/02/2021,05:50
ABC,01/02/2021,05:40

날짜와 시간의 형식을 올바르게 지정한 다음 정렬하세요.

mlr --csv put -S '$tmp=strptime(($date." ".$time), "%d/%m/%Y %H:%M")' \
then sort -f name,tmp \
then cut -x -f tmp ./input.csv>./output.csv

당신은 할 것

+------+------------+-------+
| name | date       | time  |
+------+------------+-------+
| ABC  | 01/02/2021 | 05:40 |
| ABC  | 01/02/2021 | 05:50 |
| DEF  | 01/02/2021 | 06:00 |
| HIJ  | 31/01/2021 | 07:50 |
+------+------------+-------+

답변2

가지고 놀았 csvsort지만 날짜 및 시간 필드를 재정의하려는 것 같습니다.

$ csvsort --date-format '%d/%m/%Y' -c date,time file
name,date,time
HIJ,2021-01-31,0:07:50
ABC,2021-02-01,0:05:50
DEF,2021-02-01,0:06:00

여기 csvsort에서csvkit두 번째 및 세 번째 필드의 데이터를 이름별로 정렬하는 데 사용됩니다. 두 번째 필드는 날짜 필드이며 이를 설명하는 형식 문자열을 제공합니다 --date-format. man strptime시스템에서 어떤 형식 문자열이 유효한지 확인하세요 .

답변3

주어진

$ cat file
DEF,01/02/2021,06:00
HIJ,31/01/2021,07:50
ABC,01/02/2021,05:50

그런 다음 날짜 및 시간(년 + 월 + 일 + 시간)별로 정렬하고 증가합니다.

sort -t, -k2.7,2.10n -k2.4,2.5n -k2.1,2.2n -k3,3 file
HIJ,31/01/2021,07:50
ABC,01/02/2021,05:50
DEF,01/02/2021,06:00

-k옵션은 다음과 같이 지정됩니다.

'-k POS1[,POS2]'

POS1과 POS2 사이의 줄 부분(또는 POS2가 생략된 경우 줄의 끝 부분)으로 구성된 정렬 필드를 지정합니다. 포함됨. ...각 POS에는 "F[.C][OPTS]" 형식이 있습니다. 여기서 F는 사용할 필드 번호이고 C는 필드 시작 부분의 첫 번째 문자 번호입니다. 필드와 문자 위치는 1부터 시작하여 번호가 매겨집니다.


파일의 헤더 라인을 통해 몇 가지 추가 셸 구문이 있습니다.

$ cat file
name,date,time
DEF,01/02/2021,06:00
HIJ,31/01/2021,07:50
ABC,01/02/2021,05:50

그 다음에

{
  IFS= read -r header
  echo "$header"
  sort -t, -k2.7,2.10n -k2.4,2.5n -k2.1,2.2n -k3,3
} < file
name,date,time
HIJ,31/01/2021,07:50
ABC,01/02/2021,05:50
DEF,01/02/2021,06:00

관련 정보