세 번째 열의 숫자로 데이터를 정렬하는 방법은 무엇입니까? [복사]

세 번째 열의 숫자로 데이터를 정렬하는 방법은 무엇입니까? [복사]

아래와 같은 데이터로 구성된 파일이 있는 경우 세 번째 열의 숫자를 기준으로 데이터를 어떻게 정렬합니까? 처음 두 열 사이의 공백은 탭으로 구분되지 않고 일부 공백입니다. 두 번째 열과 세 번째 열 사이의 간격은 숫자의 크기에 따라 달라집니다. 또한 두 번째 열의 일부 데이터에는 공백이 있는 반면(예: lp25( plasmid및 사이), 다른 데이터에는 공백이 없습니다(예: ).(pchromosome

HELIX       lp25(plasmid           24437 bp    RNA     linear       29-AUG-2011
HELIX       cp9(plasmid             9586 bp    DNA     helix       29-AUG-2011
HELIX       lp28-1(plasmid         25455 bp    DNA     linear       29-AUG-2011
HELIX       chromosome            911724 bp    DNA     plasmid       29-AUG-2011

답변1

이 시도:

sort -n --k3 <file>

예를 들어:

$ sort -n -k3 test
HELIX       cp9(plasmid             9586 bp    DNA     helix       29-AUG-2011
HELIX       lp25(plasmid           24437 bp    RNA     linear       29-AUG-2011
HELIX       lp28-1(plasmid         25455 bp    DNA     linear       29-AUG-2011
HELIX       chromosome            911724 bp    DNA     plasmid       29-AUG-2011

-n숫자순으로 정렬하고 -k33열을 선택합니다.

답변2

sed $'s/\t/ /g' my_file | tr -s " " | sort -t" " -k 3 

첫 번째 sed명령은 모든 탭 문자를 단일 공백으로 바꿉니다. tr -s " "여러 개의 연속된 공백 문자가 하나의 문자로 압축됨을 나타냅니다 space.

숫자 정렬이 필요한 경우 다음을 사용할 수 있습니다.

sed $'s/\t/ /g' my_file | tr -s " " | sort -t" " -n -k 3 

물론 이것이 두 번째 열의 불규칙성을 수정하는 것은 아니며 방금 알아차렸습니다. 따라서 편집합니다. 이 경우 질문이 있습니다. 다음 줄에서

HELIX       lp28-1(plasmid         25455 bp    DNA     linear       29-AUG-2011
        ^                     ^
        1                     2

이러한 구분 기호 12탭 또는 공백이 있습니까?

관련 정보