날짜 열(샘플 데이터의 마지막 열)을 고려하여 파일의 데이터를 정렬하고 싶습니다. 몇 가지 명령을 시도했지만 성공하지 못했습니다.
견본:
Beendet|48149|1550804401|STR|Fri Feb 22 4:00:45 2019
Beendet|940001|1550790961|CBST|Fri Feb 22 0:16:12 2019
Beendet|658521|1550817001|CANS|Fri Feb 22 7:30:10 2019
Beendet|48150|1550775601|EXP|Thu Feb 21 20:00:12 2019
Beendet|7|1550779201|MAS|Thu Feb 21 21:00:23 2019
Beendet|9072|1550777401|AMS0|Thu Feb 21 20:52:17 2019
Beendet|9220|1550804401|AMS1|Fri Feb 22 4:00:09 2019
Beendet|670|1550811601|MOR|Fri Feb 22 6:00:07 2019
Beendet|73|1550790061|HIST|Fri Feb 22 2:00:30 2019
Beendet|122|1550804821|HIST1|Fri Feb 22 4:07:08 2019
내 시도는 다음과 같습니다.
sort -r -k5.12 -k5.9 completefile.txt (sorting using the date and time field lengths)
sort -n -k5,5 completefile.txt
sort -k5n,5 completefile.txt
모두 동일한 결과를 제공합니다.
답변1
awk 스크립트: 마지막 필드를 타임스탬프로 변환하고 비교합니다.
#!/usr/bin/awk -f
BEGIN {
FS = "|"
}
{
data[NR] = $0
cmd = "date \"+%s\" --date " "\"" $5 "\""
cmd|getline
stamp2idx[$0] = NR
}
END {
asorti(stamp2idx, sorted)
for (n in sorted) {
print data[stamp2idx[sorted[n]]]
}
}
산출
➤ ./solution.awk data 20:39:09
Beendet|48150|1550775601|EXP|Thu Feb 21 20:00:12 2019
Beendet|9072|1550777401|AMS0|Thu Feb 21 20:52:17 2019
Beendet|7|1550779201|MAS|Thu Feb 21 21:00:23 2019
Beendet|940001|1550790961|CBST|Fri Feb 22 0:16:12 2019
Beendet|73|1550790061|HIST|Fri Feb 22 2:00:30 2019
Beendet|9220|1550804401|AMS1|Fri Feb 22 4:00:09 2019
Beendet|48149|1550804401|STR|Fri Feb 22 4:00:45 2019
Beendet|122|1550804821|HIST1|Fri Feb 22 4:07:08 2019
Beendet|670|1550811601|MOR|Fri Feb 22 6:00:07 2019
Beendet|658521|1550817001|CANS|Fri Feb 22 7:30:10 2019
답변2
예상 순서를 얻기 위해 올바르게 이해했다면 각 필드에 대한 정렬 기준을 지정해야 합니다.
sort -k5n -k2M -k3n -k4V file.txt
어디
-k5n
5열(연도)은 숫자순입니다.-k2M
2열은 "월"을 기준으로 정렬됩니다.-k3n
3열(일)은 숫자순입니다.-k4V
4열(시간)은 "버전" 순서입니다.
로그 프로세스를 변경할 수 있는 경우 date -Is
(2019-02-22T12:20:28+00:00) 사용을 고려하고 정렬을 사용하세요.
sort -t '|' -k5 file.txt
답변3
명령을 단순화하고 예상한 결과를 얻었습니다.
sort -t '|' -r -k5.8,5.18 -n -k3 completefile.txt
- 다섯 번째 열에 길이별 정렬을 적용하고
- 세 번째 열에서 숫자순으로 정렬합니다.