我的文件看起来像

10.183.227.46|242066391737|73633662;244809|com.com|com.com|2001|CCA-I|0|[29/Dec/2016:00:00:40]|26|RULE_31893406,RULE_31893405,RULE_416241598|4106,4105,4000|2006,2005,5000|0|0|0|0|2621440|3000|-|-|1003:0,1013:0,1010:Home|244809|0|117,115,40|-|-|

我想查看在第24个字段中包含117和在第6个字段中包含2001的文件
我在用
awk -F "|" '{if($6==2001 && $24==117)print }' 29_DEC_2016.1

但是作为第24个字段可以包含超过1个用逗号分隔的值
我没有得到正确的结果

最佳答案

或者使用GNU awksplit函数在带有,de limitor的列中提取单词并检查该值

awk -F "|" '{split($25,array1,","); if ( $6 == "2001" && array1[1] == "117" ){print} }' file

如果元素可以出现在列中的任何位置,那么只需~regex匹配就足够了。
awk -F "|" '$6 == "2001" && $25 ~ /117/' file

有关更严格的正则表达式匹配,请参阅James Brown's answer

07-28 02:56
查看更多