博客
关于我
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:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>