저는 Linux를 처음 접했습니다. 다음 데이터가 있는데 tbl 형식입니다.
>Feature gnl|XXX|IFEJKLFI_79
locus_tag IFEJKLFI_05549
locus_tag IFEJKLFI_05549
protein_id gnl|XXX|IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88
locus_tag IFEJKLFI_05553
locus_tag IFEJKLFI_05553
protein_id gnl|XXX|IFEJKLFI_05553
locus_tag 이름을 추출하여 기능 이름과 일치시키고 싶습니다. 더 자세히 말하면 출력이 다음과 같기를 원합니다.
Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553
awk 명령을 직접 사용할 수 있습니까, 아니면 데이터를 먼저 조작해야 합니까? 그렇다면 데이터를 추출하는 방법은 무엇입니까?
감사해요! !
답변1
각 데이터 청크 사이에 빈 줄이 있는 경우 예제 입력에 표시된 대로 awk를 사용하세요.
$ awk -v RS= '{print $1, $2, $4}' file
>Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553
또는 예제 입력에서와 같이 locus_tag 선이 항상 형상선을 따르는 경우:
$ awk '/^>/{feat=$0; n=0} ++n==2{print feat, $2}' file
>Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553
아니면 이거:
$ awk '/^>/{feat=$0; f=1} f && $1=="locus_tag"{print feat, $2; f=0}' file
>Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553