행의 날짜를 구문 분석하고 정렬하는 방법이 있습니까?

행의 날짜를 구문 분석하고 정렬하는 방법이 있습니까?

줄이 다음 순서(오래된 것부터 최신 것까지)로 정렬된 파일이 있는 경우:

<2021-05-10 Mon> <2021-06-04 Fri> <2021-07-04 Sun> <2021-08-01 Sun> ...
<2021-05-10 Mon> <2021-06-04 Fri> <2021-07-22 Thu> <2021-08-11 Wed> ...
<2021-05-10 Mon> <2021-06-04 Fri> <2021-07-18 Sun> <2021-08-01 Sun> ... 
... 

단 한 줄로 날짜 순서(최신 항목부터 오래된 항목까지)를 구문 분석하고 정렬하는 쉘 유틸리티가 있습니까?

<2021-08-01 Sun> <2021-07-04 Sun> <2021-06-04 Fri> <2021-05-10 Mon> ...
<2021-08-11 Wed> <2021-07-22 Thu> <2021-06-04 Fri> <2021-05-10 Mon> ... 
<2021-08-01 Sun> <2021-07-18 Sun> <2021-06-04 Fri> <2021-05-10 Mon> ...
... 

일반적인 접근 방식도 높이 평가됩니다.

답변1

또 다른 perl방법:

$ perl -lpe '$_ = join " ", sort {$b cmp $a} /<.*?>/g' < file
<2021-08-01 Sun> <2021-07-04 Sun> <2021-06-04 Fri> <2021-05-10 Mon>
<2021-08-11 Wed> <2021-07-22 Thu> <2021-06-04 Fri> <2021-05-10 Mon>
<2021-08-01 Sun> <2021-07-18 Sun> <2021-06-04 Fri> <2021-05-10 Mon>

이는 <...>포함된 문자열을 추출하고 역순으로 정렬한 다음(YYYY-MM-DD 날짜에 대해 잘 작동하는 바이트 간 문자열 비교를 사용하여) 인쇄하고 공백으로 연결합니다. 이렇게 하면 입력의 다른 내용(추가 공백이나 안에 포함되지 않은 텍스트 포함 <...>)이 삭제됩니다.

여기서 입력은 시간순으로 되어 있으므로 reverse시간 역순을 사용하여 가져올 수도 있습니다.

perl -lpe '$_ = join " ", reverse /<.*?>/g'

답변2

(내 생각에는) 다음과 같이 할 수 있습니다.

perl -lpe '@F=split /</, $_ . " "; $_ = join "<", shift @F, sort {$b cmp $a} @F' sample.txt

단점: 줄 끝에 공백이 추가됩니다. 한 가지 수정 사항은 $_ =~ s/ $//끝에 다음을 추가하는 것입니다.

@F = split /</, $_ . " "; 
$_ = join "<", shift @F, sort {$b cmp $a} @F; 
$_ =~ s/ $//

관련 정보