我有一个使用以下语法的文件: key1 | key2 | key31:value31, key32:value32, ...| key4
我想在第三部分中过滤所有具有特定键和值的行。
例如,在下面的测试中,我希望过滤所有age = 13的行,更多的是我希望用户键入$ 3来进行过滤,例如关键字age和age> = 15。 GET|20150715|age:13,height:11,width:12|Mike POST|20150715|age:13,width:11|Tom GET|20150715|height:11,width:11|Lily
我可以使用awk来做到这一点吗?
快速而肮脏的方式:
awk -F'|' '$3~/age:13/' file
这是“脏”,因为,如果有人是足够老,比方说age:135
,它也将被列出,同时如果没有age:13
你$3
,但package:13
该行会被输出为好。但是这种单行代码是快速的,您可以尝试一下是否适用于您的真实数据。
由于OP表示他有可用的gnu awk,因此此行应有效:
awk -F'|' -v value="12"
'$3~/age:/{v=gensub(".*age:([0-9]*).*","\\1","G",$3);if(v>value)print}' file
-v value="12"
改为要检查的值条件,例如15, 17....
if(v... value)
支票。这是具有一个行龄值的测试<13
:
kent$ cat f
GET|20150715|age:13,height:11,width:12|Mike
xxxGET|20150715|age:10,height:11,width:12|Mike
POST|20150715|age:13,width:11|Tom
GET|20150715|height:11,width:11|Lily
kent$ awk -F'|' -v value="12" '$3~/age:/{v=gensub(".*age:([0-9]*).*","\\1","G",$3);if(v>value)print}' f
GET|20150715|age:13,height:11,width:12|Mike
POST|20150715|age:13,width:11|Tom
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句