本文共 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 -k2
for i in
for循环将每一个列号输入到 '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/