0%

awk关联查找字符串并打印所在行

需求

一个相对格式化的文本文件,找到匹配的关键字,同时匹配离它最近的另外一个关键字所在行并打印

awk简单测试了满足需求

关键点:

  • 相对格式化的文本文件
  • “关联”查找关键字
  • 临时固定需求,不强调扩展性(没必要撸一个很重的脚本)

测试

测试文件test_data

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Color=red,link=jd
aaaa
bbbb
lots of other data

Color=green,type=clothes
aaa
ccc
xxx
lots of other data

Color=blue,type=shoes
zzz
yyy
xxx
lots of other data

测试1:查找离关键字ccc最近(向上)的Color=所在行并打印

1
2
localhost ~ # awk '/Color=/{ line=$0; found=0 } /ccc/ && !found { print line; found=1 }' test_data
Color=green,type=clothes

测试2:查找离关键字aaa最近(向上)的Color=所在行并打印

1
2
3
localhost ~ # awk '/Color=/{ line=$0; found=0 } /aaa/ && !found { print line; found=1 }' test_data
Color=red,link=jd
Color=green,type=clothes

简单解读:

  • /Color=/{ line=$0; found=0 }

查找到Color=后,其所在行内容保存到变量line,同时found设置为0

  • /aaa/ && !found

/aaa/ 查找到aaa

&& 并且

!found 为真(即found为假,!取反),found必须为0

{ print line; found=1 } 打印line变量的内容,found设置为1,即只匹配第一次aaa