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