다음과 같은 쉼표로 구분 된 파일이 있습니다.
100,00869184
6492,8361
1234,31
200,04071
내가 사용하려면 sort
이 파일 정렬 수치 바이 만 첫 번째 열을 .
원하는 결과 :
100,00869184
200,04071
1234,31
6492,8361
정렬을 사용하여 어떻게 이것을 달성합니까? 쉼표를 구분 기호 대신 천 단위 구분 기호처럼 취급하는 것처럼 보입니다.
모두 sort -t',' -n
와 sort -t',' -nk1'
저에게이 제공 :
1234,31
200,04071
6492,8361
100,00869184
기본값 (매개 변수 없음)으로 정렬하거나 사용 sort -t','
하면 다음 을 얻을 수 있습니다.
100,00869184
1234,31
200,04071
6492,8361
그리고 숫자로 정렬하면 다음과 같이됩니다 sort -n
.
1234,31
200,04071
6492,8361
100,00869184
원하는 결과를 얻기 위해 sort를 어떻게 사용할 수 있습니까?
추가 편집 : 약 700 만 줄의 정렬 된 목록을 작성하는 일회성 작업이므로 해결 방법 또는 기타 정통 방법이 완벽하게 허용됩니다.
답변
이것은 확실히 더러운 해결 방법이지만 로케일에 대한 @slhck의 팁 덕분 에이 작업을 수행하는 방법을 찾았습니다. 더 나은 답변이 나오면 다른 사람들에게 더 도움이 될 것입니다. 이것은 내 특정 문제에서만 작동하기 때문에 확실히 받아 들일 것입니다.
로케일을 스페인어 (볼리비아)로 설정하여 쉼표를 소수점처럼 처리 한 다음 표준 숫자 정렬로 트릭을 수행했습니다.
$ export LC_NUMERIC="es_BO.utf8"
$ cat test.csv
100,00869184
6492,8361
1234,31
200,04071
$ sort -n test.csv
100,00869184
200,04071
1234,31
6492,8361
답변
GNU sort
는 이것을 기본적으로 수행합니다 :
$ cat test
100,00869184
6492,8361
1234,31
200,04071
$ gsort -nt',' < test
100,00869184
200,04071
1234,31
6492,8361
버전:
$ gsort --version
sort (GNU coreutils) 8.19
주의 사항 : 정렬이 예상대로 작동하지 않으면 locale
아마도와 다른 것으로 설정되어있을 것 C
입니다. 왜 이런거야? locale
문자, 숫자, 소수 자릿수 등의 정렬 및 해석을 정의합니다.
이를 확인하려면 locale
터미널에 입력하십시오 . 로 LC_NUMERIC
설정되어 en_US.UTF-8
있습니까? 잘못된 정렬 순서를 설명합니다. 다시 설정하십시오 C
.
export LC_NUMERIC=C
그런 다음 sort
명령을 다시 시도 하십시오. 전역 locale
을 로 설정 하려면 다음 C
을 수행하십시오.
export LC_ALL=C
답변
-g
숫자 정렬을 수행한다고 가정 하는 옵션을 추가하십시오 .
시험:
sort -t',' -g <whatever>
답변
Delimeter를 교체하십시오.
cat commafile | tr , " " | sort -n
-당신을 도울 것입니다.