Text-Processing

文本處理:如何按由字元串分隔的日期對列表進行排序

  • April 3, 2018

我想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

如果每個<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>

引用自:https://unix.stackexchange.com/questions/435207