我有一个文件,其中我有手机号码及其类别。并非所有手机号码都有类别可用。例如
mobile123456678
category1
mobile345968483
category2
mobile956868483
mobile958688504
mobile958688438
mobile058684838
category4
mobile238348459
category5
mobile958584939
category6
etc.etc
所以我使用了下面的awk命令,它给出了哪个类别可用的手机号码。但我无法理解它是如何工作的
cat file | awk '{if ($0~/mobile/) {k=$NF;l=($NF-1)} else {print k,$0}}'
mobile123456678 category1
mobile345968483 category2
mobile058684838 category4
等
请告诉我这是如何运作的。答案 0 :(得分:1)
如果您愿意打印下一行不在mobileXXX
表单上的行,您可以直接说:
$ awk '/^mobile/ {m=$NF; next} {print m, $0}' file
mobile123456678 category1
mobile345968483 category2
mobile058684838 category4
mobile238348459 category5
mobile958584939 category6
这会检查一行是否以文字mobile
开头,如果是,则根据您的输入和代码,在变量m
中存储移动值(最后一个字段$NF
* ,虽然在这种情况下它也可能是$0
。然后,它移动到下一条记录。
如果该行没有以mobile
开头,则会打印先前存储的移动设备以及当前行。
我刚刚建议的是一种更为惯用的方式来写你所拥有的东西:
awk '{if ($0~/mobile/) {k=$NF;l=($NF-1)} else {print k,$0}}' file
因为if () {action} else {else_action}
可以避免condition {action; next} {else_action}
。
* $NF
是指给定记录中的最后一个字段,因为NF
代表字段数,$n
代表第n个字段。