博客
关于我
awk根据指定字符串内容排序
阅读量:368 次
发布时间:2019-03-04

本文共 1800 字,大约阅读时间需要 6 分钟。

引言

最近需要对一个MarkDown表格进行排序,关键字段是在第一个的两个|中间,如下

|8| | |Medium|
|5| | |Medium|
|17| | |Medium|
|538| | |Medium|
|1122| | |Easy|
|40| | |Medium|
|3| | |Medium|
|1| | |Easy|
|925| | |Easy|
|7| | |Easy|
|113| | |Medium|
|2| | |Medium|
|9| | |Easy|
|6| | |Medium|
|1370| | |Easy|
|78| | |Medium|
|208| | |Medium|
|1024| | |Medium|
|529| | |Medium|
|39| | |Medium|
|15| | |Medium|
|1291| | |Medium|
|11| | |Medium|
|865| | |Medium|
|16| | |Medium|
|89| | |Medium|
|12| | |Medium|
|14| | |Easy|
|402| | |Medium|
|856| | |Medium|
|19| | |Medium|
|290| | , |Easy|
|389| | |Easy|

解决方法

想到用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 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/

你可能感兴趣的文章
MySQL 调优/优化的 101 个建议!
查看>>
mysql 转义字符用法_MySql 转义字符的使用说明
查看>>
mysql 输入密码秒退
查看>>
mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
查看>>
mysql 里对root及普通用户赋权及更改密码的一些命令
查看>>
Mysql 重置自增列的开始序号
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
mysql-connector-java各种版本下载地址
查看>>
mysql-group_concat
查看>>
MySQL-【4】基本操作
查看>>
Mysql-丢失更新
查看>>
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>
mysql-开启慢查询&所有操作记录日志
查看>>
MySQL-数据目录
查看>>
MySQL-数据页的结构
查看>>
MySQL-架构篇
查看>>
MySQL-索引的分类(聚簇索引、二级索引、联合索引)
查看>>
Mysql-触发器及创建触发器失败原因
查看>>
MySQL-连接
查看>>