수백 줄의 파일이 있습니다.
Chr01:19967945-19972643 HanXRQChr01g0004001 1 4698 4698 0.0 8676 100.000 locus_tag=HanXRQChr01g0004001 gn=HanXRQChr01g0004001 begin=19967815 end=19972682 len=4868 chr=HanXRQChr01 strand=-1 sp=Helianthus annuus def=Probable protein kinase superfamily protein
Chr01:23001231-23011701 HanXRQChr01g0004391 1 10470 10470 0.0 19335 100.000 locus_tag=HanXRQChr01g0004391 gn=HanXRQChr01g0004391 begin=22999643 end=23012645 len=13003 chr=HanXRQChr01 strand=1 sp=Helianthus annuus def=Putative squalene cyclase; Squalene cyclase, C-terminal; Squalene cyclase, N-terminal
Chr01:23001231-23011701 HanXRQChr01g0004391 5938 6078 141 7.25e-55 220 95.035 locus_tag=HanXRQChr01g0004391 gn=HanXRQChr01g0004391 begin=22999643 end=23012645 len=13003 chr=HanXRQChr01 strand=1 sp=Helianthus annuus def=Putative squalene cyclase; Squalene cyclase, C-terminal; Squalene cyclase, N-terminal
Chr01:38759426-38779934 HanXRQChr01g0005671 1 20472 20472 0.0 37805 100.000 locus_tag=HanXRQChr01g0005671 gn=SPI begin=38759245 end=38779898 len=20654 chr=HanXRQChr01 strand=1 sp=Helianthus annuus def=Probable beige/BEACH domain ;WD domain, G-beta repeat protein
Chr01:38759426-38779934 HanXRQChr15g0474141 7163 7204 42 1.96e-08 67.6 95.238 locus_tag=HanXRQChr15g0474141 gn=IQD29 begin=37205639 end=37211555 len=5917 chr=HanXRQChr15 strand=-1 sp=Helianthus annuus def=Probable IQ-domain 29
Chr01:38759426-38779934 HanXRQChr15g0474141 7003 7043 41 7.05e-08 65.8 95.122 locus_tag=HanXRQChr15g0474141 gn=IQD29 begin=37205639 end=37211555 len=5917 chr=HanXRQChr15 strand=-1 sp=Helianthus annuus def=Probable IQ-domain 29
일부 행은 첫 번째 행과 같이 첫 번째 열을 기반으로 고유하며 Chr01:19967945-1997264
일부 행의 경우에는 과 같이 첫 번째 열을 기반으로 여러 행이 있습니다 Chr01:23001231-23011701
.
첫 번째 열의 각 값에 대해 첫 번째 행만 유지하고 싶습니다. 왜냐하면 첫 번째 행에는 열 6, 열 7 및 열 8의 다른 매개변수에 대한 최상의 값이 포함되어 있기 때문입니다.
내가 원하는 출력은
Chr01:19967945-19972643 HanXRQChr01g0004001 1 4698 4698 0.0 8676 100.000 locus_tag=HanXRQChr01g0004001 gn=HanXRQChr01g0004001 begin=19967815 end=19972682 len=4868 chr=HanXRQChr01 strand=-1 sp=Helianthus annuus def=Probable protein kinase superfamily protein
Chr01:23001231-23011701 HanXRQChr01g0004391 1 10470 10470 0.0 19335 100.000 locus_tag=HanXRQChr01g0004391 gn=HanXRQChr01g0004391 begin=22999643 end=23012645 len=13003 chr=HanXRQChr01 strand=1 sp=Helianthus annuus def=Putative squalene cyclase; Squalene cyclase, C-terminal; Squalene cyclase, N-terminal
Chr01:38759426-38779934 HanXRQChr01g0005671 1 20472 20472 0.0 37805 100.000 locus_tag=HanXRQChr01g0005671 gn=SPI begin=38759245 end=38779898 len=20654 chr=HanXRQChr01 strand=1 sp=Helianthus annuus def=Probable beige/BEACH domain ;WD domain, G-beta repeat protein
답변1
awk를 사용하여 본 첫 번째 필드를 추적할 수 있습니다.
awk '!seen[$1]++' infile
seen
이는 첫 번째 필드( )로 $1
입력된 해시를 사용합니다. 증분 후 값이 seen[$1]
false인지 확인합니다. 즉, 새 값을 만나면 seen[$1]++
0을 반환하고 !seen[$1]++
해당 값이 이미 seen[$1]++
0보다 큰 값을 반환한 경우 !seen[$1]++
false가 됩니다.
조건이 true인 경우 기본 동작은 전체 줄( { print $0 }
)을 인쇄하는 것인데, 이는 정확히 우리가 원하는 것이므로 철자를 입력할 필요가 없습니다.
이는 더 자세하지만 이해하기 쉬운 방식으로 동일한 작업을 수행합니다.
awk 'seen[$1] == 0 {
++seen[$1]
print $0
}' infile
답변2
$ sort -u -s -k1,1 file
Chr01:19967945-19972643 HanXRQChr01g0004001 1 4698 4698 0.0 8676 100.000 locus_tag=HanXRQChr01g0004001 gn=HanXRQChr01g0004001 begin=19967815 end=19972682 len=4868 chr=HanXRQChr01 strand=-1 sp=Helianthus annuus def=Probable protein kinase superfamily protein
Chr01:23001231-23011701 HanXRQChr01g0004391 1 10470 10470 0.0 19335 100.000 locus_tag=HanXRQChr01g0004391 gn=HanXRQChr01g0004391 begin=22999643 end=23012645 len=13003 chr=HanXRQChr01 strand=1 sp=Helianthus annuus def=Putative squalene cyclase; Squalene cyclase, C-terminal; Squalene cyclase, N-terminal
Chr01:38759426-38779934 HanXRQChr01g0005671 1 20472 20472 0.0 37805 100.000 locus_tag=HanXRQChr01g0005671 gn=SPI begin=38759245 end=38779898 len=20654 chr=HanXRQChr01 strand=1 sp=Helianthus annuus def=Probable beige/BEACH domain ;WD domain, G-beta repeat protein
이 sort
명령은 공백으로 구분된 첫 번째 필드만 정렬 키로 간주하고 중복 키를 제거한 후 정렬된 데이터를 반환합니다(발견된 첫 번째 고유 키가 반환됨). "안정적인" 정렬 알고리즘, 즉 동일한 키를 가진 레코드의 순서를 변경하지 않는 정렬 알고리즘을 사용하라고 지시합니다 -s
( 이것이 필요하다고 100% 확신할 수는 없지만 사용하는 것이 합리적인 것 같습니다).sort