gpt4 book ai didi

bash - 如果前一行下面的行等于第一列的特定值,则打印两行

转载 作者:行者123 更新时间:2023-11-29 09:22:32 28 4
gpt4 key购买 nike

我有一个可变输入文件,其格式如下。

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

如果 text2 valueX 存在于前一行下方,我只想打印 text1 valueA valueN valueB。例如,输出应该是:

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

Updated update 更新数据:

因为 . 是一个正则表达式元字符,它需要在输入时进行转义以避免匹配,例如 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

关于bash - 如果前一行下面的行等于第一列的特定值,则打印两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075281/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com