改进版:根据一个文件内容查找另一个文件中的所有对应内容
Linux awk 大约 1411 字有文本1.txt
,内容如下:
{"phone":"18633333333","code":"333333"}
{"phone":"18611111111","code":"111111"}
{"phone":"18655555555","code":"555555"}
{"phone":"18644444444","code":"444444"}
{"phone":"18622222222","code":"222222"}
{"phone":"18633333333","code":"000000"}
{"phone":"18655555555","code":"888888"}
有文本2.txt
,内容如下:
18600000000
18633333333
18699999999
18611111111
18655555555
文本2中18633333333
和18655555555
在文本中出现过多次,需找出所有数据。
解决方法
在Linux 查找一个文件中的是否包含在另一个文件中一文中,虽已实现了根据一个文件内容查找另一个文件中的内容,但因为awk
数组会覆盖,所以只能取最后一次出现的一条。
awk -F'"' '{if(ARGIND==1)phones[$4]=$0}{if(ARGIND>1 && ($1 in phones))print phones[$1]}' 1.txt 2.txt
改进方法
增加判断如果key
已经在数组中了,则先取出原先内容,再加上换行符\n
以及$0(原始内容JSON串)。
awk -F'"' '{if(ARGIND==1){if($4 in phones) phones[$4] = phones[$4]"\n"$0; else phones[$4] = $0}}{if(ARGIND>1 && ($1 in phones))print phones[$1]}' 1.txt 2.txt
输出:
{"phone":"18633333333","code":"333333"}
{"phone":"18633333333","code":"000000"}
{"phone":"18611111111","code":"111111"}
{"phone":"18655555555","code":"555555"}
{"phone":"18655555555","code":"888888"}
改进方法二
先将所有需要匹配的手机号加入到数组中,再用需要被匹配的字符串截取字段后进行判断是否在数组中。
awk -F '"phone":"' '{if(ARGIND==1)phones[$1]=$1}{if(ARGIND>1 && (substr($2,0,11) in phones)){print $0}}' 2.txt 1.txt
若反向匹配,即匹配不在内容中的手机号。!(phone in phones)
取反用感叹号
awk -F '"phone":"' '{if(ARGIND==1)phones[$1]=$1}{if(ARGIND>1 && !(substr($2,0,11) in phones)){print $0}}' 2.txt 1.txt
特别注意
阅读 1258 · 发布于 2019-08-26
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
编译时提示 virtual memory exhausted: Cannot allocate memory阅读 2086
-
使用 Spring Boot Admin 管理 Spring Boot 应用阅读 1297
-
状态字段应该使用 "status" 还是 "state"阅读 3460
-
MySQL 时间相差了 13 小时阅读 1683
-
Android 使用 CountDownTimer 类进行倒计时阅读 1036
-
Golang 格式化时间 yyyy-MM-dd阅读 3805
-
JMeter 使用 Response Assertion 自定义错误信息阅读 914
-
JavaScript 生成微信二维码阅读 2096
-
软考-系统架构设计师:需求分类-需求获取阅读 1445
-
Java11 -Xms -Xmx 设置堆内存大小时的注意事项阅读 990