🗒️awk正则匹配参数
2023-4-2
| 2023-4-10
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password

1. 背景

一般的awk正则匹配都是形如"/abc/{print $0}",但是这种匹配的关键字是确定的,如果关键字是可变的参数呢?

2. 实验

需求:如果b.txt的第二个字段正则匹配到a.txt就输出
[root@e1zone awk_vlookup]# cat a.txt ad123456 #.ad123457 ad123458 ad123410 ad123434 ac123457 [root@e1zone awk_vlookup]# cat b.txt 16334400 ad123456 1 16334401 ad123456 10 16334401 aa123457 2 16334402 ac123457 2 16334405 ad123457 5 16334406 ae222222 5 16334407 aww32222 5
awk实现,注意,参数var不要用//,已经不是abc这种字符串了
#cat b.txt 可以类比为一长串CMD得到了初步结果,但是还留在内存中,通过管道传给后面的awk #getline和close("a.txt")是为了多次逐行读取a.txt,如果没有close,a.txt只会被读第一行 [root@e1zone awk_vlookup]# cat b.txt |awk '{while(getline var < "a.txt" >0){if($2 ~ var)print $0","var};close("a.txt")}' 16334400 ad123456 1,ad123456 16334401 ad123456 10,ad123456 16334402 ac123457 2,ac123457 #if($2 ~ var)可以换成if(var ~ $2),可以发现字段略有不同时的差别 [root@e1zone awk_vlookup]# cat b.txt |awk '{while(getline var < "a.txt" >0){if(var ~ $2)print $0","var};close("a.txt")}' 16334400 ad123456 1,ad123456 16334401 ad123456 10,ad123456 16334402 ac123457 2,ac123457 16334405 ad123457 5,#.ad123457
如果简单地对上面取反呢?发现并没有像预期输出和上面相反的结果,不过也可以理解:管道前面的CMD是主角,$2会逐行对比a.txt的每一行,不相似的就输出。 暂未有较好的取反办法,不过一般需求是得到匹配的,先这样。
[root@e1zone awk_vlookup]# cat b.txt |awk '{while(getline var < "a.txt" >0){if($2 !~ var)print $0","var};close("a.txt")}' 16334400 ad123456 1,#.ad123457 16334400 ad123456 1,ad123458 16334400 ad123456 1,ad123410 16334400 ad123456 1,ad123434 16334400 ad123456 1,ac123457 16334401 ad123456 10,#.ad123457 16334401 ad123456 10,ad123458 16334401 ad123456 10,ad123410 16334401 ad123456 10,ad123434 16334401 ad123456 10,ac123457 16334401 aa123457 2,ad123456 16334401 aa123457 2,#.ad123457 16334401 aa123457 2,ad123458 16334401 aa123457 2,ad123410 16334401 aa123457 2,ad123434 16334401 aa123457 2,ac123457 16334402 ac123457 2,ad123456 16334402 ac123457 2,#.ad123457 16334402 ac123457 2,ad123458 16334402 ac123457 2,ad123410 16334402 ac123457 2,ad123434 16334405 ad123457 5,ad123456 16334405 ad123457 5,#.ad123457 16334405 ad123457 5,ad123458 16334405 ad123457 5,ad123410 16334405 ad123457 5,ad123434 16334405 ad123457 5,ac123457 16334406 ae222222 5,ad123456 16334406 ae222222 5,#.ad123457 16334406 ae222222 5,ad123458 16334406 ae222222 5,ad123410 16334406 ae222222 5,ad123434 16334406 ae222222 5,ac123457 16334407 aww32222 5,ad123456 16334407 aww32222 5,#.ad123457 16334407 aww32222 5,ad123458 16334407 aww32222 5,ad123410 16334407 aww32222 5,ad123434 16334407 aww32222 5,ac123457
 
技术
  • scripts
  • Prometheus Operator的理解自建derp中继遇到的坑
    目录