아래와 같은 데이터로 구성된 파일이 있는 경우 세 번째 열의 숫자를 기준으로 데이터를 어떻게 정렬합니까? 처음 두 열 사이의 공백은 탭으로 구분되지 않고 일부 공백입니다. 두 번째 열과 세 번째 열 사이의 간격은 숫자의 크기에 따라 달라집니다. 또한 두 번째 열의 일부 데이터에는 공백이 있는 반면(예: lp25( plasmid
및 사이), 다른 데이터에는 공백이 없습니다(예: ).(
p
chromosome
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
숫자순으로 정렬하고 -k3
3열을 선택합니다.
답변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
이러한 구분 기호 1
와 2
탭 또는 공백이 있습니까?