한 열이 다른 열과 부분적으로 일치하는 경우 일치

한 열이 다른 열과 부분적으로 일치하는 경우 일치

동일한 파일의 열을 비교하려고 합니다. 테이블은 다음과 같습니다.

  G  A  AA  GG CC TT CT
  C  T  CC  TT GG GG AA

내가 원하는 것은 첫 번째와 두 번째 열을 나머지 열과 비교하여 첫 번째 또는 두 번째 열의 일부가 포함되어 있는지 확인하는 것입니다.

이 같은:

awk '$1 == ^$3 || $2 == ^$3 {print $0}' File.txt

아니면 이렇게

awk '$1 ~ /$3/ || $2 ~ /$3/ {print $0}' File.txt

하지만 작동하지 않습니다. 이러한 유형의 열 간 비교를 어떻게 수행할 수 있습니까?

답변1

당신의 비교는 거꾸로입니다. 다음 대안을 시도해 보십시오.

awk '$3 ~ $1 || $3 ~ $2 { print }' inputfile
awk 'match( $3, $1 ) || match( $3, $2 ) { print }' inputfile

예제 코드에서는 (식이 문자열과 일치합니까 ?) 대신 (식이 문자열과 일치합니까 ?) $1 ~ $3로 확장 하려고 합니다 .C ~ /CC//CC/CCC ~ /C//C/CC

답변2

$ awk '{ for (i=3; i<=NF; ++i) if (match($i,$1) || match($i,$2)) { print; next } }' file
G A AA GG CC TT CT
C T CC TT GG GG AA

두 줄은 실패하고 두 줄은 성공하는 파일에 대한 테스트:

$ cat file
G A AA GG CC TT CT
C T AG AA GG GG AA
G C AA AA TT TT AT
C T CC TT GG GG AA

$ awk '{ for (i=3; i<=NF; ++i) if (match($i,$1) || match($i,$2)) { print; next } }' file
G A AA GG CC TT CT
C T CC TT GG GG AA

스크립트 awk는 열 3부터 시작하는 모든 열을 반복하고 각 열을 열 1 및 2와 비교합니다. 열 1이나 2의 문자가 다른 열에 나타나면 해당 줄이 즉시 인쇄되고 스크립트는 다음 줄에서 계속됩니다.

답변3

시도해보세요(Kusalananda 샘플에서 훔친 데이터 사용)

awk '{PAT = "[" $1 $2 "]"} gsub (PAT, "&") > 2' file
G A AA GG CC TT CT
C T CC TT GG GG AA

답변4

다음 방법을 시도해 볼 수 있습니다.

grep -P '^(\S+) (\S+) .*(\1|\2)' gene.file

관련 정보