이 목록을 정렬할 때 "쿠알라룸푸르"의 공백을 어떻게 무시할 수 있나요? 열을 선택하고 탭에서 정렬하여 올바른 결과를 얻었지만 열의 공백을 처리하는 방법을 알고 싶습니다. 특히 목록 형식을 다시 지정하는 것이 좋은 습관처럼 보이지 않기 때문입니다. 목록이 더 큰 시간일 때.
미리 감사드립니다
Kuala Lumpur 78 56
Seoul 86 66
Karachi 95 75
Tokyo 85 60
Lahore 85 75
Manila 90 85
도시별:
Karachi 95 75
Kuala Lumpur 78 56
Lahore 85 75
Manila 90 85
Seoul 86 66
Tokyo 85 60
또한 고온(고-저, 두 번째 열) 및 저온(저-고, 세 번째 열)으로 정렬했습니다.
고온을 누르십시오:
Karachi 95 75
Manila 90 85
Seoul 86 66
Lahore 85 75
Tokyo 85 60
Kuala Lumpur 78 56
저온을 누르십시오:
Kuala Lumpur 78 56
Tokyo 85 60
Seoul 86 66
Karachi 95 75
Lahore 85 75
Manila 90 85
답변1
1) 명령을 통해 공백을 탭으로 변환합니다 unexpand
(공백 8개마다 탭이 있다고 생각하세요).
TAB
2) 다음과 같이 구분 정렬을 사용합니다.
TAB=`echo -e "\t"`
sort -t"$TAB" YOUR_FILE
답변2
참고:- 귀하의 질문이 두 번 변경되었지만 답변을 계속해서 변경할 수는 없지만 답변은 동일하게 유지된다는 점을 알려드리고 싶습니다. -k2
2가 열인 곳을 사용하여 열 번호를 정렬하면 다음을 얻을 수 있습니다. 정답이에요.
방금 sort + sed를 사용했습니다.
도시별
sort -k1 input_data | sed '/^$/d; s/$/\n/'
고온을 누르십시오:
sort -k2 -nr data | sed '/^$/d; s/$/\n/'
저온을 누르십시오:
sort -k4 -nr data | sed '/^$/d; s/$/\n/'
설명하다:
정렬된 데이터는 sed로 전송됩니다.
그런 다음 sed를 사용하여 첫 번째 빈 줄을 제거한 /^$/d
다음 각 줄 뒤에 새 줄을 추가합니다.
답변3
두 가지 옵션이 있습니다.
공백이 제거된 정렬 가능한 새 이름 열을 만들고 이 임시/새 열을 기준으로 정렬한 다음 결국 이 "임시" 열의 출력을 억제합니다. 또는
필드 구분 기호가 모든 필드에서 유효한 문자가 아닌지 확인하세요. 공백은 도시 이름에 유효한 문자이므로 다른 문자를 필드 구분 기호로 사용해야 합니다.
옵션 1을 사용하면 이름을 모두 소문자, 숫자 제거, 문자를 다른 문자로 변환 등의 다른 이름으로 바꿀 수 있으므로 더 많은 제어가 가능하지만 구현하기가 더 복잡합니다.
옵션 2는 다음과 같이 수행할 수 있습니다.
#!/bin/bash
awk '{TLOW=$(NF-1);
THIGH=$NF;
$NF="";
$(NF-1)="";
gsub(" +$","");
CITYNM=$0;
printf ("%s:%s:%s\n", CITYNM, TLOW, THIGH)}' | sort -t:
이제 문제는 "Cape Town" 및 "Capelle"과 같은 이름을 정렬하는 방법입니다. 유닉스 정렬 명령은 Capelle을 Cape Town 앞에 배치하지만 이는때때로당신이 원하는 것이 아닙니다. 이때 옵션 1이 작동하게 됩니다.