ioerror

sort 사용법 및 옵션 - 텍스트 파일의 행 단위 데이터를 정렬하고 중복을 제거하는 명령 본문

OS

sort 사용법 및 옵션 - 텍스트 파일의 행 단위 데이터를 정렬하고 중복을 제거하는 명령

반응형

sort - Sort lines of text files

텍스트 파일이나 표준 입력으로 들어오는 데이터의 각 행을 정렬하여 출력하는 유닉스 및 리눅스 기본 명령어이다. 숫자의 크기 비교, 알파벳순 정렬, 특정 칼럼(구분자 기반) 기준 정렬, 중복 행 제거 등 다양한 데이터 가공 작업에 사용된다. 파이프라인(|)과 조합하여 로그 분석이나 대용량 데이터 처리 시 핵심 도구로 활용된다.

1. sort 용도

  • 로그 파일에서 특정 열(IP 주소, 요청 시간 등)을 기준으로 순서를 정렬하거나 최다 발생 항목을 추출하는 상황에서 사용된다.
  • uniq 명령어와 조합하여 중복 데이터를 집계하거나, -u 옵션으로 정렬과 동시에 중복 행을 제거할 때 자주 활용된다.

2. sort 서식

sort [OPTION]... [FILE]...

3. sort 옵션

옵션 설명 사용가능 OS 및 쉘
-n, --numeric-sort 문자열이 아닌 순수한 숫자 크기를 기준으로 정렬한다. 모든 유닉스/리눅스
-r, --reverse 정렬 결과를 내림차순(역순)으로 뒤집어 출력한다. 모든 유닉스/리눅스
-k, --key=KEYDEF 정렬 기준이 될 칼럼(필드)의 위치를 지정한다 (e.g. -k 2). 모든 유닉스/리눅스
-t, --field-separator=SEP 칼럼을 구분할 구분자(delimter)를 지정한다 (기본값: 공백/탭). 모든 유닉스/리눅스
-u, --unique 정렬 시 중복된 행을 하나만 남기고 제거한다. 모든 유닉스/리눅스
-h, --human-numeric-sort 사람이 읽기 쉬운 숫자 단위(2K, 1G 등)를 인식하여 정렬한다. GNU Coreutils Linux
-V, --version-sort 파일 버전 번호 형태(v1.2, v1.10 등)를 올바른 순서로 정렬한다. GNU Coreutils Linux
-R, --random-sort 해시 값을 기준으로 행의 순서를 무작위로 섞는다. GNU Coreutils Linux
-c, --check 파일이 이미 정렬되어 있는지 확인하고, 정렬되지 않은 경우 경고를 출력한다. 모든 유닉스/리눅스
-o, --output=FILE 정렬 결과를 파일로 저장한다 (원본 파일 지정 시 덮어쓰기 가능). 모든 유닉스/리눅스
 
# 쉼표(,)를 구분자로 2번째 칼럼(숫자) 기준 내림차순 정렬 및 중복 제거
sort -t',' -k2,2nr -u data.csv
# userC,95,active
# userA,88,active
# userB,72,inactive

# du 명령 결과에서 용량이 큰 순서대로 상위 항목 출력
du -sh * | sort -rh | head -n 3
# 1.2G    video.mp4
# 450M    data.tar.gz
# 120M    images
  • userC,95,active: 2번째 숫자가 가장 높은 행이 최상단에 정렬된 결과이다.
  • 1.2G video.mp4: human-numeric 옵션(-h)을 사용하여 G, M 단위 크기순으로 정확히 내림차순 정렬된 결과이다.

4. sort 특이사항(유의사항)

  • 기본 정렬 방식은 사전식(Lexicographical) 문자열 비교이므로, 숫자 정렬 시 -n 옵션 없이 정렬하면 10이 2보다 먼저 오는 현상이 발생한다.
  • 로케일(Locale) 환경변수(LC_ALL 또는 LANG)에 따라 정렬 순서(대소문자 처리, 특수문자 우선순위)가 달라질 수 있으므로, 일관된 정렬 결과가 필요할 경우 LC_ALL=C sort 형태로 실행하는 것이 권장된다.
  • 원본 파일로 정렬 결과를 다시 저장할 때 리다이렉션(sort file.txt > file.txt)을 사용하면 파일 내용이 모두 erased(빈 파일이 됨)되는 문제가 발생하므로, -o 옵션(sort -o file.txt file.txt)을 사용해야 한다.

관련 명령어들

  • uniq: 정렬된 텍스트에서 연속되는 중복 행을 제거하거나 집계한다.
  • cut: 텍스트 파일의 각 행에서 특정 칼럼을 추출한다.
  • awk: 필드 기반의 고도화된 텍스트 처리 및 정렬 작업을 수행한다.
  • shuf: 파일의 행을 무작위로 섞는다. GNU Coreutils Linux

https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference

 

UNIX & Linux Command Reference

유닉스 / 리눅스 명령어 표유닉스와 리눅스 환경에서 자주 사용되는 필수 명령어들을 완벽하게 정리한다. 서버 관리, 프로그래밍, 일상적인 시스템 운영 등 어떤 목적이든 터미널 환경을 능숙하

ioerror.tistory.com

 

 

 

반응형
Comments