有一文本文件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地址出现的次数是一样的,疏忽的地方还请评论区留言给我