아래와 같은 데이터가 포함된 텍스트 파일이 있습니다(정확하게는 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
댓글을 통해 +
일곱 번째 열 또는 -
. 입력 파일은 탭으로 구분됩니다. 아마도 이를 위한 가장 자연스러운 도구는 다음 +
과 같은 이름의 파일에 행을 저장 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