줄이 다음 순서(오래된 것부터 최신 것까지)로 정렬된 파일이 있는 경우:
<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/ $//