동일한 파일의 열을 비교하려고 합니다. 테이블은 다음과 같습니다.
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/
C
CC ~ /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