우분투 실전 명령어 | cut paste join으로 컬럼 데이터 정리

로그나 CSV에서 필요한 컬럼만 빠르게 뽑아 결합해야 할 때 cut, paste, join 조합이 가장 효율적입니다. 데이터 가공 스크립트를 만들기 전에 터미널에서 즉시 결과를 확인할 수 있어 장애 대응 속도를 크게 줄여 줍니다.

언제 쓰는가

로그나 CSV를 빠르게 붙여서 보고 싶을 때 가장 먼저 쓰는 조합입니다. 예를 들어 사용자 ID 목록과 상태 목록이 각각 다른 파일에 있을 때, 스크립트 짜기 전에 cut/paste/join으로 바로 합쳐서 원인 파악이 가능합니다.

바로 쓰는 명령어

# 1) CSV에서 필요한 컬럼만 추출
cut -d',' -f1,3 users.csv > users_key.csv

# 2) 두 파일을 탭 기준으로 옆으로 붙이기
paste users_key.csv status.txt > merged.tsv

# 3) 공통 키(1열) 기준으로 조인
join -t',' -1 1 -2 1 users_key.csv plan.csv > joined.csv
# join 전에 정렬이 필요할 때
sort -t',' -k1,1 users_key.csv -o users_key.csv
sort -t',' -k1,1 plan.csv -o plan.csv
join -t',' -1 1 -2 1 users_key.csv plan.csv

핵심 옵션/패턴

  • cut
    • -d: 구분자 지정. CSV면 -d','
    • -f: 가져올 필드 번호. -f1,3 처럼 다중 지정 가능
  • paste
    • 기본은 탭 구분으로 옆으로 병합
    • -d',' 로 출력 구분자 변경 가능
  • join
    • 입력 파일이 조인 키 기준으로 정렬되어 있어야 안정적으로 동작
    • -1, -2 로 각 파일의 키 컬럼 번호 지정
    • -a1, -a2 를 쓰면 한쪽에만 있는 키도 포함 가능

명령 출력 예시

$ cat users_key.csv
1001,kim
1002,lee
1003,park

$ cat plan.csv
1001,basic
1003,pro
1004,team

$ join -t',' -1 1 -2 1 users_key.csv plan.csv
1001,kim,basic
1003,park,pro
$ join -t',' -a1 -e 'N/A' -o '0,1.2,2.2' users_key.csv plan.csv
1001,kim,basic
1002,lee,N/A
1003,park,pro

자주 하는 실수

  • join 입력 파일을 정렬하지 않고 실행해서 일부 키가 누락됩니다.
  • CSV인데 기본 공백 구분으로 가정해 cut/join 결과가 깨집니다. 구분자를 항상 명시해야 합니다.
  • 헤더 줄을 그대로 조인해 첫 줄이 이상하게 합쳐집니다. 필요하면 tail -n +2로 본문만 처리하세요.

검증 방법

# 1) 조인 대상 키 개수 비교
cut -d',' -f1 users_key.csv | sort -u | wc -l
cut -d',' -f1 plan.csv | sort -u | wc -l

# 2) 조인 결과 키 중복 검사
cut -d',' -f1 joined.csv | sort | uniq -d

# 3) 누락 키 확인
join -t',' -v1 users_key.csv plan.csv

운영 팁

데이터 정리 파이프라인은 항상 원본 파일을 건드리지 말고 중간 산출물을 남기는 방식이 안전합니다. 특히 배치 작업에서는 sort 결과를 별도 파일로 저장해 재현성을 확보하면 장애 재분석이 훨씬 빨라집니다.

출처

Ubuntu Manpage
GNU Coreutils Manual