테이블에서 행을 추출하여 별도의 파일에 넣으려면 어떻게 해야 합니까?

테이블에서 행을 추출하여 별도의 파일에 넣으려면 어떻게 해야 합니까?

5개의 열과 여러 행이 있는 테이블이 있습니다.

마지막 열에는 각 행의 모든 ​​값의 합계가 포함됩니다.

그렇게:

A       B   C   D   E
gene1   1   3   5   9
gene2   0   0   4   4
gene3   1   0   1   2
gene4   5   5   0   10
gene5   2   0   0   2

내가 원하는 것은 gene2와 gene5 라인을 별도의 파일로 추출하고 다른 유전자(추출된 유전자는 아님), gene1, gene3 및 gene4를 포함하는 다른 파일을 갖는 것입니다.

명령 을 사용하려고 하는데 awk행과 숫자를 연결하는 방법을 모르겠습니다.

답변1

사용 awk:

awk '{
    if ( ($2 == $5 && $3 + $4 == 0) || ($3 == $5 && $2 + $4 == 0) || ($4 == $5 && $2 + $3 == 0) ) {
        print $0 > "match-file"
    } else if ($2 + $3 + $4 == $5) { 
        print $0 > "nomatch-file"
    }
}' input

답변2

(매우 유사한) 대안:

awk '{
    if ( $2 == $5 || $3 == $5|| $4 == $5 ) {
        print $0 > "match-file"
    } else if ($2 + $3 + $4 == $5) { 
        print $0 > "nomatch-file"
    }
}' input

답변3

Using GNU awk:

$ awk 'NR>1{
    t = gensub(/ /, "  ", "g")
    f = gsub(/ 0 /, "", t) > 1 ? "File1" : "File2"
    print $0 > f
}' file

모든 Posix sed 구조를 사용하여 다음을 수행할 수 있습니다.

$ sed -ne '
   1b
   s/[[:blank:]]0[[:blank:]]/&/2w File1
   t
   s/^//w File2
' file

sed를 모드로 실행하면 -n모드 공간이 기본적으로 인쇄되지 않습니다. 헤더 행을 건너뛰고 첫 번째 행으로 간주합니다.

헤더가 아닌 행에서 두 개 이상의 분리된 0을 볼 수 있는 경우 => 마지막 열은 2, 3 또는 4개 열 중 하나와 일치해야 합니다. 이는 마지막 열이 2, 3, 4열의 합이기 때문입니다.

선행 또는 후행 공백이 없다고 가정합니다.

일치하는 레코드를 찾기 위해 결과가 File1에 덤프됩니다. 나머지는 File2입니다. 헤더가 두 출력 모두에 존재하지 않습니다.

답변4

줄에서 2개의 (선행) 0을 찾고 있는 것 같습니다. 이 경우 다음을 시도하십시오.

awk '{if (NR==1){print > "match"; print > "nomatch"}
    else
    {if ($0 ~ / 0.* 0/) {print > "match"} else {print > "nomatch"}}}' file1

관련 정보