如何筛选输入文件中紧跟指定匹配(含部分匹配)text2行的text1行并输出
筛选相邻行中符合前缀匹配的text1和text2组合
要实现你要的功能,用awk工具是最直接高效的,它能轻松处理行与行之间的关联判断。下面是具体的步骤和命令:
步骤1:设置匹配前缀变量
先在shell里定义你要匹配的前缀变量,比如你需要匹配a.b.:
val="a.b."
步骤2:执行awk筛选命令
用下面的命令处理你的输入文件(假设输入文件名为input.txt):
awk -v prefix="$val" 'prev ~ /^text1/ && $0 ~ "^text2 " prefix {print prev "\n" $0} {prev=$0}' input.txt
命令工作原理拆解
-v prefix="$val":把shell中定义的val变量传递给awk内部的prefix变量,这样我们可以灵活修改匹配前缀,不用改awk脚本本身。prev ~ /^text1/:检查上一行(用prev变量存储)是否是以text1开头的行。$0 ~ "^text2 " prefix:检查当前行是否是以text2(注意后面有空格)加上我们指定的前缀开头的行。- 当两个条件同时满足时,就打印上一行的
text1内容和当前行的text2内容,中间换行分隔。 {prev=$0}:每处理完一行,就把当前行的内容保存到prev变量,供下一行的判断使用。
测试输出效果
用你提供的修正后输入文件执行命令,会得到你想要的结果:
text1 valueA valueN valueB text2 a.b.c.d-e text1 valueC valueN valueD text2 a.b.c.d-e text1 valueI valueN valueJ text2 a.b.c.d-e
如果之后需要修改匹配的前缀,只需要重新设置val变量的值再执行awk命令就行,非常灵活。
内容的提问来源于stack exchange,提问作者TempoChocolate
相关产品推荐
相关产品推荐

