탭으로 구분된 테이블에서 중복 문자열이 있는 행만 추출

탭으로 구분된 테이블에서 중복 문자열이 있는 행만 추출

10개의 탭으로 구분된 열이 있는 긴 데이터 목록이 있습니다. 처음 두 열은 ID입니다. 선택한 ID를 가진 행을 검색하고 싶습니다.

먼저 각 ID가 로 끝나도록 선택한 ID의 이름을 바꿉니다 comp-. 그런 다음 선택한 ID가 열 1과 열 2 모두에 있는 행을 추출하려고 합니다.

문서:

comp-AA11232.1  GR55896.1
AB55887.1   comp-FR87559.1
comp-AC11232.1  comp-AE55888.1
comp-AC66742.1  comp-AD87559.1

원하는 출력:

comp-AC11232.1    comp-AE55888.1
comp-AC66742.1    comp-AD87559.1

을 사용하고 있습니다 sed -n '/comp\-.*\tcomp\-.*/p' file. 출력 파일은 기준을 충족하는 모든 파일이지만 안타깝게도 동일한 기준의 일부 줄이 출력 파일에서 누락되었습니다.

여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 어떤 아이디어가 있나요? 아니면 이 상황에서 더 나은 grep/awk/sed 접근 방식이 있습니까?

답변1

awk -F'\t' '$1 ~/^comp-/ && $2 ~/^comp-/' infile

동일하지만 매개변수에서 패턴을 전달합니다.

awk -F'\t' -v pat='comp-' '$1 ~"^" pat && $2 ~"^" pat' infile

또는 문자열 일치로 비교하고 여전히 매개변수에서 전달합니다.

awk -F'\t' -v str='comp-' 'index($1, str)==1 && index($2, str)==1' infile

당신은 또한 볼 수 있습니다패턴과 일치하는 텍스트를 찾는 방법은 무엇입니까?추가 매칭 옵션을 확인하세요.

답변2

진주

perl -MList::MoreUtils=all -F'\t' -lane '
  print if all { /^comp-/ } @F[0,1];
' file

sedGNU 버전

$ sed -n '/^comp-.*\tcomp-/p' file

관련 정보