Text-Processing
文本處理:如何按由字元串分隔的日期對列表進行排序
我想
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>