Line Sorter
텍스트 줄을 알파벳순, 길이순, 역순 또는 무작위로 정렬합니다
입력 줄
정렬된 줄
줄 정렬이란?
줄 정렬은 텍스트 블록의 줄을 특정 규칙에 따라 재배열하는 작업입니다. 알파벳순, 역순, 줄 길이순, 무작위 섞기 등이 가능합니다. 온라인에서 줄을 정렬하는 것은 로그 파일, CSV 데이터, 설정 목록 또는 순서가 중요한 일반 텍스트 콘텐츠를 다룰 때 흔히 필요한 작업입니다. 이 작업은 텍스트를 줄바꿈 문자 기준으로 분리하고, 결과 배열에 비교 함수를 적용한 뒤, 정렬된 줄을 다시 합쳐 출력합니다.
대부분의 프로그래밍 언어는 기본적으로 사전순(lexicographic) 비교를 사용하여 문자열을 정렬합니다. 이 방식은 Unicode 코드 포인트를 기준으로 문자를 비교하므로, 대문자가 소문자보다 앞에 오고("Banana"가 "apple"보다 앞) 숫자가 문자보다 앞에 위치합니다. 자연 정렬 또는 콜레이션이라고도 불리는 로케일 인식 정렬은 언어별 규칙을 적용하여 이를 보정합니다. JavaScript의 localeCompare(), Python의 locale.strxfrm(), LC_COLLATE를 사용한 POSIX sort 명령 모두 로케일 인식 정렬을 제공합니다.
길이순 정렬은 목록에서 가장 짧거나 긴 항목을 찾거나, 로그 출력에서 이상값을 식별하거나, 항목을 복잡도 순으로 구성할 때 유용합니다. 역순 정렬은 재정렬 없이 기존 줄 순서를 뒤집는 것으로, Z-A 알파벳 정렬과는 다릅니다. 무작위 섞기는 각 줄에 무작위 정렬 키를 부여하여 실행할 때마다 다른 순서를 만들어냅니다. 동일한 입력에서 모드를 전환하는 것이 일회성 스크립트를 작성하는 것보다 훨씬 빠릅니다.
이 줄 정렬기를 사용하는 이유
텍스트를 붙여넣고 정렬 모드를 선택하면 즉시 결과를 얻습니다. 커맨드라인 설정, 스크립트 파일, 패키지 설치가 필요 없습니다.
줄 정렬기 활용 사례
줄 정렬 모드 참조
이 도구는 6가지 정렬 모드를 지원합니다. 아래 표는 각 모드, 사용하는 비교 방법, 그리고 입력 목록(apple, banana, cherry, date, fig)에 대한 샘플 결과를 설명합니다.
| 모드 | 설명 | JS 메서드 | 예시 출력 |
|---|---|---|---|
| A-Z | Alphabetical ascending | localeCompare() | apple, banana, cherry |
| Z-A | Alphabetical descending | localeCompare() reversed | cherry, banana, apple |
| Length (short) | Shortest line first | a.length - b.length | fig, date, apple, banana |
| Length (long) | Longest line first | b.length - a.length | banana, apple, date, fig |
| Reverse | Flip line order, no reordering | Array.reverse() | Last line becomes first |
| Random | Randomized comparator (biased) | Math.random() - 0.5 | Different every run |
내부 정렬 알고리즘
JavaScript에서 Array.sort()를 호출하면 V8 엔진(Chrome, Node.js)은 2019년부터 Timsort를 사용합니다. 다른 런타임은 서로 다른 알고리즘을 사용합니다. 아래 표는 언어 표준 라이브러리에서 사용되는 가장 일반적인 정렬 알고리즘을 비교합니다. 모두 이 도구의 줄 정렬 작업을 일반적인 입력(100,000줄 미만)에서 1밀리초 이내에 처리합니다.
| 알고리즘 | 사용처 | 시간 복잡도 | 비고 |
|---|---|---|---|
| Timsort | Python, Java (Arrays.sort) | O(n log n) | Stable, fast on partially sorted data |
| Quicksort | C stdlib, V8 (older) | O(n log n) | In-place, unstable by default |
| Merge sort | Most stable-sort implementations | O(n log n) | Stable, predictable, uses extra memory |
| Introsort | C++ std::sort, .NET | O(n log n) | Hybrid: quicksort + heapsort fallback |
| Radix sort | Fixed-length keys, integers | O(nk) | Non-comparative, linear for short keys |
코드 예제
JavaScript, Python, Go 및 커맨드라인에서 프로그래밍 방식으로 줄을 정렬합니다. 각 예제는 알파벳순, 길이순, 역순 정렬을 다룹니다.
const text = `banana
apple
cherry
date
fig`
// Sort A-Z (locale-aware)
const az = text.split('\n').sort((a, b) => a.localeCompare(b)).join('\n')
// → "apple\nbanana\ncherry\ndate\nfig"
// Sort by line length, shortest first
const byLen = text.split('\n').sort((a, b) => a.length - b.length).join('\n')
// → "fig\ndate\napple\nbanana\ncherry"
// Reverse line order (no alphabetical sorting)
const reversed = text.split('\n').reverse().join('\n')
// → "fig\ndate\ncherry\napple\nbanana"
// Remove duplicates and sort
const unique = [...new Set(text.split('\n'))].sort().join('\n')text = """banana apple cherry date fig""" lines = text.splitlines() # Sort A-Z (case-insensitive) az = sorted(lines, key=str.lower) # → ['apple', 'banana', 'cherry', 'date', 'fig'] # Sort by line length by_len = sorted(lines, key=len) # → ['fig', 'date', 'apple', 'banana', 'cherry'] # Reverse original order rev = lines[::-1] # → ['fig', 'date', 'cherry', 'apple', 'banana'] # Shuffle randomly import random random.shuffle(lines) # modifies in place
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
text := "banana\napple\ncherry\ndate\nfig"
lines := strings.Split(text, "\n")
// Sort A-Z
sort.Strings(lines)
fmt.Println(strings.Join(lines, "\n"))
// → apple\nbanana\ncherry\ndate\nfig
// Sort by length
sort.Slice(lines, func(i, j int) bool {
return len(lines[i]) < len(lines[j])
})
fmt.Println(strings.Join(lines, "\n"))
// → fig\ndate\napple\nbanana\ncherry
}# Sort lines A-Z
sort file.txt
# Sort lines Z-A (reverse)
sort -r file.txt
# Sort numerically (first field)
sort -n data.txt
# Sort by line length (awk + sort + cut)
awk '{ print length, $0 }' file.txt | sort -n | cut -d' ' -f2-
# Shuffle lines randomly
shuf file.txt # GNU coreutils
sort -R file.txt # alternative (not truly uniform)
# Sort and remove duplicates
sort -u file.txt