如果列中的模式在两行中匹配,如何打印新行?

如果列中的模式在两行中匹配,如何打印新行?

我有以下文件:

transcr_15824 -
YML042W -
transcr_18545 -
YCR105W +
transcr_16934 +
YDR032C +
transcr_15237 +
YDL008W -

我确实需要类似这样的东西:

transcr_15824 -
YML042W -
Match
transcr_18545 -
YCR105W +
Not
transcr_16934 +
YDR032C +
Match
transcr_15237 +
YDL008W -
Not

编辑:基本上我需要比较每两行的第二列。如果第一行的第二列与第二行的第二列匹配,则匹配。如果第一行的第二列与第二行的第二列不匹配,则不匹配。

答案1

这是一种方法:

$ awk '{print} !(NR%2){if($2 == last) print "Match"; else print "Not"} {last = $2}' file
transcr_15824 -
YML042W -
Match
transcr_18545 -
YCR105W +
Not
transcr_16934 +
YDR032C +
Match
transcr_15237 +
YDL008W -
Not

答案2

perl -pae '($_ .= <>) .= qw/NO MATCH/[0+/\n.*\s\Q$F[1]\E$/] . $/'  input

在自动分割模式下运行 perl。第二个字段是 $F[1],在下一行 <> 中进行比较,并根据 itz 是否存在匹配或不匹配附加到当前行 $_。

相关内容