CodeGym /행동 /Docker SELF /파일 정렬 및 필터링: 명령어 `sort`, `uniq`, `cut`

파일 정렬 및 필터링: 명령어 `sort`, `uniq`, `cut`

Docker SELF
레벨 8 , 레슨 3
사용 가능

파일 정렬 및 필터링: 명령어 sort, uniq, cut

1. 명령어 sort

sort 명령어는 텍스트 파일의 라인을 정렬하는 데 사용돼. 플랫 텍스트부터 CSV까지 모든 텍스트 형식에서 작동해. 기본적으로 알파벳 순서로 정렬하지만, 다양한 옵션이 있어서 정말 많은 걸 할 수 있어.

기본 문법

sort [옵션] 파일

간단한 예제

예를 들어 names.txt라는 파일이 있고, 그 내용이 이렇게 있어:

Charlie
Alice
Bob
David

이거를 알파벳 순서로 정렬하면 이렇게 돼:

sort names.txt

결과:

Alice
Bob
Charlie
David

sort의 주요 옵션

역순 정렬

만약 내림차순으로 정렬하고 싶다면, -r 옵션을 써봐:

sort -r names.txt

결과:

David
Charlie
Bob
Alice

숫자 정렬

숫자를 알파벳 순서로 정렬하면 이상할 수 있어. 예를 들어, numbers.txt 파일에 다음 내용이 있어:

10
2
5
1

알파벳 순 정렬 결과:

1
10
2
5

하지만 -n 옵션(숫자 정렬)을 사용하면:

sort -n numbers.txt

결과는 올바르게 나와:

1
2
5
10

공백에 대한 강건성

가끔 라인에 공백이 포함돼 있을 수 있어. sort가 헷갈리지 않게 하려면 -b 옵션을 써봐:

sort -b 더러운_파일.txt

예제

웹사이트 방문 로그 visits.log가 있다고 가정해보자:

user2 15
user1 5
user3 30
user4 20

우리는 방문 횟수(두 번째 열)를 기준으로 사용자를 정렬하고 싶어. 이렇게 하면 돼:

sort -k2 -n visits.log

여기서 -k2는 "두 번째 열을 기준으로 정렬"을 의미해. 결과:

user1 5
user2 15
user4 20
user3 30

2. 명령어 uniq

uniq 명령어는 파일에서 중복된 줄을 제거해줘. 근데 중요한 건, 이건 연속된 중복된 줄에서만 작동해. 그러니깐 파일의 다른 부분에 동일한 줄이 있다면 파일을 먼저 정렬해야 돼.

기본 문법

uniq [옵션] 파일

간단한 예제

예를 들어, colors.txt 파일이 있다고 해보자:

red
green
green
blue
blue
blue
red

그냥 uniq를 사용하면:

uniq colors.txt

결과는 이렇게 나올거야:

red
green
blue
red

회피할 수 없는 중복 삭제

먼저 파일을 정렬하자:

sort colors.txt | uniq

결과:

blue
green
red

uniq의 주요 옵션

반복 횟수 세기

각 줄이 몇 번 나왔는지 알고 싶으면 -c 옵션을 사용해:

sort colors.txt | uniq -c

결과:

   3 blue
   2 green
   2 red

예제

파일 access.log에 IP 주소 리스트가 있다고 해보자:

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

가장 자주 등장한 IP를 알고 싶다면:

sort access.log | uniq -c | sort -rn

결과:

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. cut 명령어

cut 명령어는 문자열의 특정 부분을 추출하는 데 사용돼. 예를 들어, CSV 파일의 특정 열이나 문자 범위를 추출할 수 있어.

기본 구문

cut [옵션] 파일

간단한 예

data.csv 파일:

Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager

이름만(첫 번째 열) 추출하기:

cut -d',' -f1 data.csv

결과:

Alice
Bob
Charlie

여기서:

  • -d',' — 구분자(쉼표).
  • -f1 — 추출할 필드(열).

cut의 주요 옵션

문자 범위 선택

파일 data.csv이 고정된 너비의 열로 구성돼 있다면:

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

우리는 나이(문자 12에서 14)를 추출할 수 있어:

cut -c12-14 data.csv

결과:

25
30
22

여러 필드 선택

파일 log.csv이 있다면:

2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped

날짜와 로그 레벨(필드 1과 2)만 선택하기:

cut -d',' -f1,2 log.csv

결과:

2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO

4. 실습 예제: sort, uniq, cut 결합

다음 데이터가 있는 로그 파일을 사용하자:

user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
  1. IP 주소를 추출하자:
cut -d',' -f2 log.txt
  1. 중복 제거 후 개수를 계산하자:
cut -d',' -f2 log.txt | sort | uniq -c
  1. 개수별로 정렬하자:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

결과:

2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION