我有一个可变的输入文件,其格式可以如下。
text1 valueA valueN valueB
text2 valueX
text1 valueC valueN valueD
text2 valueX
text1 valueE valueM valueF
text1 valueG valueM valueH
text1 valueI valueN valueJ
text2 valueX
text1 valueK valueO valueL
text1 valueP valueO valueQ
text1 valueR valueN valueS
text1 valueT valueM valueU
我只想打印上一行下面text1 valueA valueN valueB
是否text2 valueX
存在。例如,输出应为:
text1 valueA valueN valueB
text2 valueX
text1 valueC valueN valueD
text2 valueX
text1 valueI valueN valueJ
text2 valueX
我还需要能够匹配的一部分valueX
。假设valueX=a.b.c.d-e
,我需要搭配a.b.
myvariable=a.b.
echo $myvariable
a.b.
更新:对不清楚的输入数据表示歉意...我想我可以匹配部分文本,但是我错了。
因此,如果数据如下所示:
text1 valueA valueN valueB
text2 a.b.c.d-e
text1 valueC valueN valueD
text2 a.b.c.d-e
text1 valueE valueM valueF
text1 valueG valueM valueH
text1 valueI valueN valueJ
text2 a.b.c.d-e
text1 valueK valueO valueL
text1 valueP valueO valueQ
text1 valueR valueN valueS
text1 valueT valueM valueU
您如何匹配,例如a.b.
,如果val=a.b.
echo $val
a.b.
这是awk中的一个:
$ awk '$0=="text2 valueX"{print p ORS $0}{p=$0}' file
输出:
text1 valueA valueN valueB
text2 valueX
text1 valueC valueN valueD
text2 valueX
text1 valueI valueN valueJ
text2 valueX
解释:
$ awk '
$0=="text2 valueX" { # if record is a match
print p ORS $0 # print previous buffered record and current
}
{
p=$0 # buffer record for next round
}' file
更新升级与更新的数据:
与.
正则表达式元字符一样,它需要在输入处进行转义以避免与以下内容匹配abbb
:
$ awk -v s="a\\\.b\\\." '$0~s{print p ORS $0}{p=$0}' file
现在输出:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句