열의 패턴이 두 행에서 일치하는 경우 새 행을 인쇄하는 방법은 무엇입니까?

열의 패턴이 두 행에서 일치하는 경우 새 행을 인쇄하는 방법은 무엇입니까?

다음 파일이 있습니다.

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에 일치 항목이 있는지 여부에 따라 다음 줄 <>에서 비교되어 현재 줄 $_에 추가됩니다.

관련 정보