成功最有效的方法就是向有经验的人学习!

awk常见题目分享一例

有一文本文件lessons.txt内容如下,请使用awk处理该文本,并输出内容如result.txt
lessons.txt
634751 预排
568688 预排
386760 删除
619373 预排
428491 预排
487563 完成
603342 完成
436339 完成

result.txt
删除 386760
完成 487563,603342,436339
预排 634751,568688,619373,428491

以下是我做题的步骤

利用数组分门别类的拼接好了

[root@m01 shell-2018-11-5]# awk '{if (a[$2]){a[$2]=a[$2]","$1}else{a[$2]=$2","$1}fi}END{for (i in a)print a[i]}' l.txt
删除,386760
完成,487563,603342,436339
预排,634751,568688,619373,428491

去掉多余的分隔符,这里使用了if双分支语句

[root@m01 shell-2018-11-5]# awk '{if (a[$2]){a[$2]=a[$2]","$1}else{a[$2]=$2" "$1}fi}END{for (i in a)print a[i]}' l.txt
删除 386760
完成 487563,603342,436339
预排 634751,568688,619373,428491

将if语句变为三目运算符

[root@m01 shell-2018-11-5]# awk '{a[$2]?a[$2]=a[$2]","$1:a[$2]=$2" "$1}END{for (i in a)print a[i]}' l.txt
删除 386760
完成 487563,603342,436339
预排 634751,568688,619373,428491

精简三目运算符里面的语句(据说这是网上通用的答案?)

[root@m01 shell-2018-11-5]# awk '{a[$2]=a[$2]?a[$2]","$1:$2" "$1}END{for (i in a)print a[i]}' l.txt
删除 386760
完成 487563,603342,436339
预排 634751,568688,619373,428491

仅供参考,此题比较简单,我使用了数组、判断和循环,与之前做的统计IP地址出现的次数是一样的,疏忽的地方还请评论区留言给我

赞(0) 打赏
未经允许不得转载:陈桂林博客 » awk常见题目分享一例
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册