cut과 paste
CSV 파일에서 특정 열만 뽑아야 할 때, 두 파일의 열을 나란히 붙여야 할 때, cut과 paste가 필요합니다.
cut은 각 줄에서 원하는 부분만 잘라냅니다. 구분자 기준의 필드를 뽑을 수도 있고, 문자 위치로 잘라낼 수도 있습니다. paste는 반대로 여러 파일의 줄을 옆으로 붙여 하나로 만듭니다.
cut 기본 사용법
cut 옵션 파일명명령어 | cut 옵션
| 옵션 | 설명 | 예시 |
|---|---|---|
-d 구분자 |
필드 구분자 지정 (기본값: 탭) | cut -d':' -f1 |
-f 번호 |
추출할 필드 번호 | cut -f1,3 |
-c 위치 |
추출할 문자 위치 | cut -c1-5 |
/etc/passwd 파일을 활용해 실습합니다.
# /etc/passwd 파일 첫 3줄 확인head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
:로 구분된 7개 필드가 있습니다. 순서대로 사용자명:암호:UID:GID:설명:홈디렉토리:쉘입니다.
# 사용자명(1번 필드)만 추출cut -d':' -f1 /etc/passwd | head -5
root
daemon
bin
sys
sync
# 사용자명(1번)과 로그인 쉘(7번)만 추출cut -d':' -f1,7 /etc/passwd | head -5
root:/bin/bash
daemon:/usr/sbin/nologin
bin:/usr/sbin/nologin
sys:/usr/sbin/nologin
sync:/bin/sync
# 여러 필드 범위로 추출 (1번부터 3번까지)cut -d':' -f1-3 /etc/passwd | head -3
root:x:0
daemon:x:1
bin:x:2
문자 위치로 자르기
필드 구분자가 없는 고정 너비 데이터에는 -c 옵션을 씁니다.
# 날짜 로그에서 날짜 부분만 추출 (1~10번째 문자)cat > /tmp/fixed.log << 'EOF'2026-04-24 09:01:00 서버 시작2026-04-24 09:05:30 요청 처리 시작2026-04-24 09:10:15 오류 발생2026-04-24 09:15:00 서버 종료EOFcut -c1-10 /tmp/fixed.log
2026-04-24
2026-04-24
2026-04-24
2026-04-24
# 시간 부분만 추출 (12~19번째 문자)cut -c12-19 /tmp/fixed.log
09:01:00
09:05:30
09:10:15
09:15:00
CSV 파일 처리
# products.csv에서 상품명과 가격만 추출cut -d',' -f1,3 /tmp/products.csv
상품명,가격
노트북,1200000
마우스,35000
키보드,89000
책상,450000
의자,320000
모니터,680000
# 전자기기만 필터링 후 가격 추출grep "전자기기" /tmp/products.csv | cut -d',' -f1,3
노트북,1200000
마우스,35000
키보드,89000
모니터,680000
paste로 파일 병합
paste는 여러 파일의 줄을 탭으로 이어붙입니다. 같은 줄 번호끼리 연결됩니다.
# 두 파일 준비cat > /tmp/names.txt << 'EOF'김철수이영희박민준EOFcat > /tmp/phones.txt << 'EOF'010-1234-5678010-9876-5432010-5555-1234EOF# 두 파일을 탭으로 붙이기paste /tmp/names.txt /tmp/phones.txt
김철수 010-1234-5678
이영희 010-9876-5432
박민준 010-5555-1234
# 구분자를 쉼표로 지정paste -d',' /tmp/names.txt /tmp/phones.txt
김철수,010-1234-5678
이영희,010-9876-5432
박민준,010-5555-1234
join으로 공통 필드 기준 병합
join은 SQL의 JOIN처럼 공통 필드를 기준으로 두 파일을 합칩니다. 두 파일 모두 해당 필드로 정렬되어 있어야 합니다.
cat > /tmp/dept.txt << 'EOF'1001 김철수1002 이영희1003 박민준EOFcat > /tmp/salary.txt << 'EOF'1001 35000001002 42000001003 3800000EOF# 첫 번째 필드(사원번호)를 기준으로 병합join /tmp/dept.txt /tmp/salary.txt
1001 김철수 3500000
1002 이영희 4200000
1003 박민준 3800000
실습: 파이프라인 조합
# 실습 1: /etc/passwd에서 사용자명과 쉘만 뽑아 bash 사용자 확인cut -d':' -f1,7 /etc/passwd | grep "bash"
root:/bin/bash
jeongps:/bin/bash
# 실습 2: access.log에서 요청 메서드만 추출해 빈도 분석cut -d'"' -f2 /tmp/access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
7 GET
2 POST
1 DELETE
cut, sort, uniq를 파이프로 연결해서 로그 분석을 한 줄로 처리했습니다.