改进版:根据一个文件内容查找另一个文件中的所有对应内容
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
特别注意
阅读 2107 · 发布于 2019-08-26
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Git 提示 refusing to merge unrelated histories阅读 2509
-
Docker WARNING IPv4 forwarding is disabled. Networking will not work阅读 1065
-
Linux 查看进程启动时的环境变量值阅读 203
-
算法:解析中缀表达式阅读 1284
-
Android Toast 工具类阅读 4013
-
IDEA 禁止导入所有包阅读 2232
-
Kubernetes 数据存储 ConfigMap阅读 1050
-
Tomcat 开启 gzip 压缩阅读 1440
-
macOS locate 命令报错解决方法阅读 223
-
MySQL 的四种事务隔离级别阅读 2035