나는 이것을 시도했습니다 :
$ echo "2,3435,1" | sort -n
2,3435,1
$ sort -t',' -n test_sort.txt
kill,gill,burger
110,20,30,13
$ cat test_sort.txt
110,20,30,13
kill,gill,burger
내 sort
명령이 작동하지 않는 이유는 무엇입니까?
내가 원하는 명령은 sort
다음과 같이 작동해야 합니다.
$sort -t',' -n test_sort.txt
110,13,20,30,burger,gill,kill
답: tr , '\n' < a | sort -n 붙여넣기, -
“스티븐 차제라스에게 감사드립니다”
답변1
sort
전체 라인을 달리십시오. 기본적으로 행의 전체 내용을 정렬하지만 -k
해당 행 내의 하나 이상의 필드를 정렬하는 데 사용할 수도 있습니다. -t
필드 사이의 구분 기호를 변경하는 데 사용할 수 있습니다. 사용 -t
하지 않고 사용하는 것이 -k
의미가 있는 상황은 생각할 수 없습니다 .
두 번째 명령은 다음과 같습니다.
printf "%s\n%s\n" "110,20,30,13" "kill,gill,burger" | sort -t',' -n
생산하다:
kill,gill,burger
110,20,30,13
이것이 바로 제가 기대했던 것입니다. -t','
개별 필드에 대해 정렬 작업을 지시하지 않으면 필드 구분 기호가 변경되어 숫자 값이 0(그리고 숫자 정렬 요청을 사용했기 때문에 ) k
이전에 정렬되었으므로 아무런 효과가 없습니다.1
-n
답변2
쉼표로 정렬이 가능합니다.
echo "a,b,z,sa,b,z,a,d,2,4a,a,dx" | tr , "\n" | sort
산출
2
4a
a
a
a
b
b
d
dx
sa
z
z
한 줄로 돌아가려면 다음을 수행하십시오.
echo "a,b,z,sa,b,z,a,d,2,4a,a,dx" | tr , "\n" | sort | tr "\n" ,
답변3
정렬은 행 내의 필드가 아닌 각 행을 기준으로 이루어집니다.
기본적으로 줄의 첫 번째 문자를 기준으로 정렬하고 거기부터 계속됩니다. 그러나 시작 부분이 아닌 "키"를 기준으로 정렬할 수도 있습니다. 이는 행 끝의 성이나 숫자 값 등을 기준으로 정렬하려는 경우에 유용합니다. 그것이 -t
바로 깃발의 목적입니다.에 익숙해개별 행을 분류하고 그 안에서 정렬합니다.
이것이 당신이 하고 싶은 일이라면, 보세요.인라인 정렬 필드
답변4
다음 명령을 사용하면 더 쉬울 것입니다 perl
.
$ perl -F',' -anle '
BEGIN { $" = "," }
print "@{[sort {$a <=> $b} @F]}"
' file
13,20,30,110
kill,gill,burger
숫자가 포함된 행만 정렬됩니다. 다음과 같은 문자열이 포함된 행을 정렬하려면 sort -n
다음을 시도해 보세요.
$ $ perl -MPOSIX=isdigit -F',' -anle '
BEGIN { $" = "," }
print "@{[ sort { isdigit($a)
? ($a <=> $b)
: ($a cmp $b)
} @F
]}"
' file
13,20,30,110
burger,gill,kill
이 방법은 like에 문자열만 포함된 경우에만 작동하고 like에 문자열, 숫자 kill,gill,20
등 이 혼합되어 있으면 실패합니다.