리눅스 텍스트 처리 명령어: 정렬, 중복 제거, 필드 추출 및 파일 비교

주요 텍스트 조작 명령어 소개

리눅스 환경에서는 대량의 텍스트 데이터를 효율적으로 처리하기 위한 강력한 명령어들이 제공됩니다. 특히 로그 분석, 구성 파일 수정, 스크립트 자동화 작업에서 다음과 같은 도구들이 자주 활용됩니다: sort, uniq, cut, comm, diff.

sort – 데이터 정렬

sort 명령은 입력된 텍스트를 기준에 따라 오름차순 또는 내림차순으로 정렬하여 표준 출력에 표시합니다. 원본 파일은 변경되지 않습니다.

주요 옵션

옵션설명
-r역순(내림차순)으로 정렬
-u중복된 라인 제거 (유일한 값만 출력)
-f대소문자 구분 없이 정렬
-d사전식 정렬 (문자, 숫자, 공백만 고려)
-c입력 파일이 정렬되어 있는지 검사
-m이미 정렬된 파일들을 병합

사용 예시

# cs.log 내용을 알파벳 순으로 정렬
$ sort cs.log

# 내림차순으로 정렬
$ sort -r cs.log

# 중복 제거 후 정렬
$ sort -u cs.log

uniq – 인접 중복 라인 제어

uniq는 연속된 중복 라인을 필터링합니다. 일반적으로 sort와 함께 사용하여 전체 중복을 제거합니다.

주요 옵션

옵션설명
-c각 라인 앞에 출현 횟수 출력
-d중복된 라인만 출력
-D모든 중복 라인을 그대로 출력
-u중복되지 않은 라인만 출력
-i대소문자 무시
-s N처음 N개 문자 생략 후 비교
-w N앞에서부터 N자까지만 비교

사용 예시

$ cat data.txt
apple
apple
banana
cherry
cherry
cherry

# 중복 제거 (연속된 경우)
$ uniq data.txt
apple
banana
cherry

# 유일한 라인만 출력
$ uniq -u data.txt
banana

# 각 라인의 반복 횟수 확인
$ uniq -c data.txt
      2 apple
      1 banana
      3 cherry

cut – 특정 필드 추출

cut은 각 라인에서 지정된 바이트, 문자 또는 필드를 추출하는 데 사용됩니다. 특히 /etc/passwd와 같은 구분자 기반 파일 처리에 유용합니다.

주요 옵션

옵션설명
-b LIST지정된 바이트 위치 추출
-c LIST지정된 문자 위치 추출
-d DELIM기본 구분자(:, \t 등) 대신 사용할 문자 지정
-f LIST지정된 필드 번호 출력 (1부터 시작)
-s구분자가 없는 라인은 출력하지 않음

사용 예시

# /etc/passwd에서 사용자 이름과 홈 디렉터리 추출 (필드 1과 6)
$ cut -d: -f1,6 /etc/passwd
root:/root
bin:/bin
daemon:/sbin
...

# 첫 번째 필드만 추출
$ cut -d: -f1 /etc/passwd | head -3
root
bin
daemon

comm – 정렬된 파일 비교

comm은 두 개의 **정렬된** 텍스트 파일을 라인 단위로 비교하고 세 가지 범주로 결과를 출력합니다:

  • 1열: 첫 번째 파일에만 존재
  • 2열: 두 번째 파일에만 존재
  • 3열: 양쪽 모두 존재

제어 옵션

옵션효과
-1첫 번째 열(파일1 전용) 숨김
-2두 번째 열(파일2 전용) 숨김
-3세 번째 열(공통 라인) 숨김

사용 예시

$ echo -e "a\naa" > file1
$ echo -e "a\nbb" > file2
$ sort -o file1 file1
$ sort -o file2 file2

# 공통 라인만 출력
$ comm -12 file1 file2
a

# file1에만 있고 file2에는 없는 항목
$ comm -23 file1 file2
aa

diff – 파일 차이 분석

diff는 두 파일 간의 차이점을 상세히 보여주는 명령어로, 패치 생성이나 구성 관리에 널리 사용됩니다.

주요 옵션

옵션설명
-u통합 형식 출력 (git diff 등에서 사용)
-c컨텍스트 형식 출력
-y측면 비교 (병렬 출력)
-W N측면 비교 시 출력 너비 설정
-i대소문자 무시
-w모든 공백 무시
-B빈 줄 추가/삭제 무시
-q다른지 여부만 요약 출력
-s동일할 경우 메시지 출력
-r디렉터리 재귀 비교
-a모든 파일을 텍스트로 취급

사용 예시

$ diff file1 file2
2c2
< aa
---
> bb

# 통합 형식으로 비교
$ diff -u file1 file2
--- file1	2025-04-05 10:00:00.000000000 +0900
+++ file2	2025-04-05 10:00:05.000000000 +0900
@@ -1,2 +1,2 @@
 a
-aa
+bb

# 두 파일이 동일한지 확인
$ diff -q original.txt backup.txt
Files original.txt and backup.txt are identical

태그: sort uniq cut comm diff

6월 2일 00:34에 게시됨