텍스트 처리: 문자열로 구분된 날짜별로 목록을 정렬하는 방법

텍스트 처리: 문자열로 구분된 날짜별로 목록을 정렬하는 방법

file.txt날짜별로 내용을 정렬 하고 싶습니다 . 정렬할 날짜는 네 번째 테이블 데이터 <td></td>라벨 에 있습니다.

예를 들어 내용은 다음과 같습니다 file.txt.

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>

원하는 출력:어떻게 해야 하나요?

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>

명령을 사용했지만 sort작동하지 않습니다.

cat file.txt 2> /dev/null | sort -t'>' -k9n -k9.4M -k9.7n

편집하다:이 참조 링크를 찾았지만 여전히 작동하지 않습니다. https://stackoverflow.com/a/16060031/7842707

답변1

<tr>각 항목이 별도의 줄에 있는 경우 :

awk+sort해결책:

awk -F'[<>]' '{ print $(NF-4), $0 }' file.txt | sort -k1,1n -k1.5M | cut -d' ' -f2-
  • -F'[<>]'<- 및 >필드 구분 기호로 처리
  • $(NF-4)- 각 행의 마지막 <td>태그 값을 포함합니다(예:). 2017Jan31이는 정렬 키로 사용됩니다.
  • -k1,1n- 첫 번째 필드를 기준으로 숫자순으로 정렬(예: 날짜, 연도 기준)
  • -k1.5M- 날짜와 월은 5번째 문자부터 정렬됩니다.
  • cut -d' ' -f2-- 보조 정렬 키 제거(첫 번째 필드)

산출:

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>

관련 정보