파일 정렬 및 필터링: 명령어 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
- IP 주소를 추출하자:
cut -d',' -f2 log.txt
- 중복 제거 후 개수를 계산하자:
cut -d',' -f2 log.txt | sort | uniq -c
- 개수별로 정렬하자:
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
GO TO FULL VERSION