博客
关于我
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日志 事务问题_mysql因为事务日志问题无法启动
查看>>
mysql日志文件
查看>>
mysql日志管理学习笔记
查看>>
mysql日志问题定位实用命令
查看>>
MySQL日期时间函数大全
查看>>
mysql时间相减的问题
查看>>
mysql时间表示和计算
查看>>
MySQL是如何做容器测试的?
查看>>
mysql更改数据库表utf-8_修改mysql数据库为 utf-8
查看>>
mysql更改表引擎INNODB为MyISAM的方法总结
查看>>
mysql更新一个表里的字段等于另一个表某字段的值
查看>>
Mysql更新时间列只改日期为指定日期不更改时间
查看>>
MySQL更新锁(for update)摘要
查看>>
mysql更新频率_MySQL优化之如何了解SQL的执行频率
查看>>
mysql替换表的字段里面内容
查看>>
MySQL最多能有多少连接
查看>>
MySQL最大建议行数 2000w,靠谱吗?
查看>>
MySQL有哪些锁
查看>>
MySQL服务器安装(Linux)
查看>>
mysql服务器查询慢原因分析方法
查看>>