테이블에서 일부 데이터를 조작하고 추출하는 방법은 무엇입니까?

테이블에서 일부 데이터를 조작하고 추출하는 방법은 무엇입니까?

저는 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

관련 정보