本文共 1800 字,大约阅读时间需要 6 分钟。
最近需要对一个MarkDown表格进行排序,关键字段是在第一个的两个|中间,如下
想到用shell脚本通过awk来进行排序,代码如下:
for i in `awk '{split($1,a,"[\|\|]");print NR,a[2]}' test.txt | sort -n -k2 | awk '{print $1}'`; do awk 'NR=='$i'{print}' test.txt; done 思路就是:
split($1,a,"[\|\|]"分割出test.txt第一列中的关键字段print NR,a[2]记录每一列的列号和关键字段sort -nr -k2for i infor循环将每一个列号输入到 'NR=='$i''NR=='$i'排序好的列号打印出test.txt每一行数据结果如下:
|1| | |Easy| |2| | |Medium| |3| | |Medium| |5| | |Medium| |6| | |Medium| |7| | |Easy| |8| | |Medium| |9| | |Easy| |11| | |Medium| |12| | |Medium| |14| | |Easy| |15| | |Medium| |16| | |Medium| |17| | |Medium| |19| | |Medium| |39| | |Medium| |40| | |Medium| |78| | |Medium| |89| | |Medium| |113| | |Medium| |208| | |Medium| |290| | , |Easy| |389| | |Easy| |402| | |Medium| |529| | |Medium| |538| | |Medium| |856| | |Medium| |865| | |Medium| |925| | |Easy| |1024| | |Medium| |1122| | |Easy| |1291| | |Medium| |1370| | |Easy|效果如下:
| # | Title | Solution | Difficulty |
|---|---|---|---|
| 1 | Easy | ||
| 2 | Medium | ||
| 3 | Medium | ||
| 5 | Medium | ||
| 6 | Medium | ||
| 7 | Easy | ||
| 8 | Medium | ||
| 9 | Easy | ||
| 11 | Medium | ||
| 12 | Medium | ||
| 14 | Easy | ||
| 15 | Medium | ||
| 16 | Medium | ||
| 17 | Medium | ||
| 19 | Medium | ||
| 39 | Medium | ||
| 40 | Medium | ||
| 78 | Medium | ||
| 89 | Medium | ||
| 113 | Medium | ||
| 208 | Medium | ||
| 290 | , | Easy | |
| 389 | Easy | ||
| 402 | Medium | ||
| 529 | Medium | ||
| 538 | Medium | ||
| 856 | Medium | ||
| 865 | Medium | ||
| 925 | Easy | ||
| 1024 | Medium | ||
| 1122 | Easy | ||
| 1291 | Medium | ||
| 1370 | Easy |
转载地址:http://axrr.baihongyu.com/