如何使用awk过滤复杂的行?

杰伊斯

我有一个使用以下语法的文件: 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....
  • 此单行代码将输出年龄:值(在第3列中)大于您指定的值的行
  • 如果要支票较小,等于...,请更改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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章