改进版:根据一个文件内容查找另一个文件中的所有对应内容
Linux awk About 1,411 words有文本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
特别注意
Views: 2,794 · Posted: 2019-08-26
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...