큰 텍스트 파일에서 줄 추출

큰 텍스트 파일에서 줄 추출

다음과 같은 데이터가 포함된 텍스트 파일이 있습니다(정확히는 1875줄).

chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 6585538 6585547 0.905022147 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148428 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_6585517 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 6767855 6767864 0.703029237 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148303 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_6768100 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 8686283 8686292 0.481284243 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148085 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_8685906 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 10660924    10660933    0.818294903 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148400 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_10661128 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327417    12327426    0.584010382 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148387 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327433    12327442    0.825226087 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148388 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504 

맨 끝에 "+"가 있는 줄을 추출하는 솔루션을 찾고 있습니다. (마지막 . 이후에 발생합니다 . 마찬가지로 가닥 선을 추출하여 별도의 파일에 넣으 ;려고 합니다 .-

편집: 데이터 세트 변경, 이전에 잘못된 파일을 보고 있었습니다.

답변1

+의견을 통해 7번째 열이 또는 인 줄을 추출하려고 한다는 것을 알고 있습니다 -. 입력 파일은 탭으로 구분됩니다. 그렇게 하려면 +이라는 파일에 줄을 저장 plus하고 이라는 파일에 빼기 줄을 저장하는 동안 minus가장 자연스러운 도구는 아마도 다음과 같습니다 awk.

awk -F'\t' '$7=="+"{print >"plus"} $7=="-"{print>"minus"}' file

작동 방식:

  • -F'\t'

    awk한 번에 한 레코드(라인)씩 읽어 필드로 구분합니다. 여기서는 필드 구분 기호를 탭으로 설정했습니다.

  • $7=="+"{print >"plus"}

    7번째 필드가 이면 +해당 행을 파일에 저장합니다 plus.

  • $7=="-"{print>"minus"}

    마찬가지로, 7번째 필드가 이면 -해당 행을 파일에 저장합니다 minus.

답변2

sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile

일곱 번째 탭으로 구분된 섹션의 경우 다음을 수행합니다.

sed -ne 'h;s/\([^\t]*\t\)\{6\}[^\t+-]*//
            /^-/{g;w minus.file' -e 'b
         }; /^+/{g;w plus.file'  -e \}

<tab>그러나 위의 이스케이프 대신 리터럴 문자를 사용해야 할 수도 있습니다 \t.

관련 정보