mygems

CSV 파일을 필터링해 필요한 행만 남기는 방법

CSV를 값, 범위, 여러 조건으로 필터링하고 그 행만 저장하세요. Excel, Sheets, 명령줄, 휴대폰별 방법과 함정까지.

작성: mygems ·

CSV 필터링은 흔히 하나로 취급되지만 사실 두 가지 작업입니다. 조건에 맞는 행만 보는 것과, 그 행만 새 파일로 저장하는 것입니다. 첫 번째는 어떤 도구든 잘합니다. 함정은 두 번째에 있습니다. 필터링된 40행을 보여 주는 스프레드시트가 40,000행을 전부 저장해 버리기 때문입니다.

빠른 답

  • 조건에 맞는 행 보기: Excel 또는 Sheets에서 데이터 → 필터를 선택하고 값을 고릅니다.
  • 조건에 맞는 행만 저장하기: 필터를 적용하고, 보이는 행을 선택해 새 시트에 복사한 다음 그 시트를 저장합니다. 필터링된 결과를 바로 저장해 주는 도구를 써도 됩니다.
  • 큰 파일이거나 반복할 작업: 아래의 명령 하나, csvgrep, mlr, DuckDB 중 하나면 됩니다.
  • 휴대폰에서: 변환한 스프레드시트 대신 제대로 된 필터 패널이 있는 CSV 앱을 사용합니다.

Excel에서

  1. 데이터의 아무 셀이나 클릭하고 Ctrl+Shift+L(Mac은 ⌘+Shift+F)을 누르거나 데이터 → 필터를 선택합니다.
  2. 열 머리글의 화살표에서 값을 고르거나, 숫자 필터 / 텍스트 필터에서 보다 큼, 포함 같은 조건을 지정합니다.
  3. 여러 열의 필터를 함께 쓸 수 있습니다. 필터마다 결과가 더 좁혀집니다.

필터링된 행만 저장하려면: 보이는 범위를 선택해 복사하고, 새 시트에 붙여 넣은 뒤 그 시트를 CSV로 저장합니다. 자동 필터가 적용된 범위를 복사하면 Excel은 보이는 행만 복사합니다.

함정: 필터를 건 시트 자체를 CSV로 저장하면 숨겨진 행을 포함한 모든 행이 저장됩니다. 필터는 보기 방식일 뿐, 데이터를 바꾸지 않습니다.

열 사이의 OR(국가가 독일이거나 매출이 10,000을 넘는 행)은 열끼리 AND로만 묶는 자동 필터로는 할 수 없습니다. 데이터 → 고급에서 조건 범위를 사용하세요. 서로 다른 행에 적은 조건은 OR로 묶입니다. 다른 장소에 복사를 선택하면 결과를 한 번에 다른 곳에 쓸 수 있습니다.

그리고 CSV 파일이므로, ID나 우편번호, 긴 숫자가 들어 있다면 더블클릭 대신 가져오기로 여세요. 그렇지 않으면 필터링할 값이 이미 바뀌어 있을 수 있습니다. Excel이 CSV 데이터를 바꾸지 못하게 하는 방법을 참고하세요.

Google 스프레드시트(Google Sheets)에서

데이터 → 필터 만들기는 Excel과 비슷하게 동작합니다. 하지만 이 작업에는 더 쓸모 있는 FILTER 함수가 있습니다. 조건에 맞는 행을 다른 곳에 써 주고 최신 상태로 유지합니다.

=FILTER(A2:F, C2:C="Europe", E2:E<2000)

조건을 추가하면 각각 AND로 묶입니다. OR는 더해서 만듭니다: (C2:C="Europe")+(C2:C="Asia"). 이 수식을 새 탭에 넣으면 그 탭이 필터링된 파일이 됩니다. 그 탭을 연 상태에서 파일 → 다운로드 → CSV를 선택하세요.

명령줄에서

스프레드시트로 열기에는 너무 큰 파일이나 매주 실행할 필터라면, 클릭하는 것보다 명령이 더 빠르고 매번 같은 결과를 줍니다.

grep은 솔깃하지만 틀립니다. 행의 어디에 있든 텍스트가 일치하므로, grep Europe은 메모에 "not Europe"이라고 적힌 행도 잡아냅니다. 헤더 행은 빠집니다. 그리고 awk -F,는 따옴표로 묶인 필드 안의 쉼표까지 포함해 모든 쉼표에서 나눕니다. CSV를 이해하는 도구를 쓰세요.

csvkit, 한 열에 대한 정확한 일치 또는 패턴:

csvgrep -c country -m "Germany" in.csv > germany.csv
csvgrep -c email -r "@example\.com$" in.csv > example.csv

Miller, 조건식에:

mlr --csv filter '$country == "Germany" && $revenue > 10000' in.csv > out.csv

DuckDB, SQL로 표현할 수 있는 모든 것에, 어떤 크기의 파일이든:

duckdb -c "COPY (SELECT * FROM 'in.csv' WHERE country = 'Germany' AND revenue > 10000) TO 'out.csv'"

세 도구 모두 헤더를 유지하고, 따옴표를 올바르게 처리하며, 조건에 맞는 행만 씁니다. DuckDB는 CSV에서 SQL 실행하기 가이드에서 더 자세히 다룹니다.

엉뚱한 행이 나오는 필터링 실수

모두 그럴듯해 보이는 결과를 돌려주기 때문에 위험합니다.

  • 대소문자와 공백. Germany, germany, Germany (끝에 공백)는 대부분의 필터에서 서로 다른 세 값입니다. 하나로 필터링하기 전에 그 열의 고유한 값을 먼저 확인하세요.
  • 텍스트로 저장된 숫자. 열이 텍스트이면 revenue > 10000은 문자열을 비교하며, "9000" > "10000"은 사전순으로 참입니다. 도구가 그 열을 숫자로 인식하는지 확인하세요.
  • 형식이 뒤섞인 날짜. 03/04/2026은 어떤 내보내기에서는 3월이고 다른 곳에서는 4월입니다. 날짜 열은 어느 형식인지 확인한 뒤에 필터링하세요.
  • 빈 셀. 빈 셀은 0일까요, 알 수 없는 값일까요, 해당 없음일까요? 필터는 보통 "보다 작음" 조건에서 빈 셀을 조용히 제외합니다.

휴대폰에서

휴대폰에서 CSV를 스프레드시트로 변환해 필터링하면 위의 문제가 모두 생기는 데다 화면까지 작습니다. 자체 필터가 있는 CSV 앱은 파일을 있는 그대로 처리합니다.

Smart CSV Viewer에서는 Filter를 누르면 표 위에 패널이 열립니다. 열별로 조건을 추가하세요. 연산자는 열의 유형에 맞게 바뀌므로, 숫자 열은 숫자를, 날짜 열은 날짜를 비교합니다. 적용하기 전에 버튼 Apply · 4 rows가 남을 행 수를 알려 줍니다. 빠르게 하려면 셀을 길게 눌러 Filter by this value를 선택하세요.

두 가지 조건(Continent가 Europe와 같음, Budget이 2000보다 작음)과 Apply, 4 rows라고 적힌 버튼이 있는 필터 패널
조건과, 적용 전에 보이는 행 수
30행 중 9행으로 필터링된 표. 모두 유럽 행이며 상단 바 아래에 필터 바가 표시됨
결과: 30행 중 9행

Edit as SQL은 조건을 직접 고칠 수 있는 쿼리로 바꿔 줍니다. 결과를 다른 곳으로 가져가려면 행을 선택해 복사하세요. 복사본은 필터를 따르며, 스프레드시트에는 실제 셀로 붙여 넣어집니다. AI 어시스턴트에게 평범한 말로 행을 요청할 수도 있으며, 이때 전송되는 것은 열 이름뿐입니다.

CSV File Viewer - Smart CSViPhone 및 iPad · Android

iPhone과 Android에서 CSV를 위해 만든 필터 패널입니다. 유형을 반영한 조건, 적용 전에 보이는 일치 행 수, 원할 때 쓰는 SQL, 그리고 업로드는 전혀 없습니다.

기능

match any 또는 match none 그룹으로 조건을 조합하는 것은 Pro 기능이며, 단순한 AND 조건은 무료입니다.

자주 묻는 질문

CSV 파일을 필터링하고 필터링된 행만 저장하려면 어떻게 하나요?
Excel이나 Google 스프레드시트에서 필터를 적용하고, 보이는 행을 선택해 복사한 다음 새 시트에 붙여 넣고 그 시트를 CSV로 저장하세요. 필터링된 시트를 그대로 저장하면 숨겨진 행을 포함한 모든 행이 저장됩니다. 명령줄에서는 csvgrep, Miller, DuckDB가 조건에 맞는 행만 한 번에 씁니다.
Excel 없이 CSV를 필터링할 수 있나요?
네. Google 스프레드시트는 무료로 CSV를 필터링할 수 있고, csvkit, Miller, DuckDB 같은 명령줄 도구는 어떤 크기의 파일이든 필터링하며, 휴대폰의 CSV 앱은 변환 없이 파일을 바로 필터링합니다.
CSV를 필터링할 때 grep이 엉뚱한 행을 주는 이유는 무엇인가요?
grep은 특정 열이 아니라 행의 어디에서든 텍스트를 찾기 때문에, 다른 필드에 그 단어가 있는 행도 잡아냅니다. 헤더도 빠집니다. 쉼표를 구분자로 지정한 awk는 쉼표가 들어 있는 따옴표 필드에서 잘못 나눕니다. 대신 CSV를 이해하는 도구를 쓰세요.
Excel에서 CSV를 OR 조건으로 필터링하려면 어떻게 하나요?
자동 필터는 열끼리 AND로만 묶습니다. 열 사이의 OR는 데이터 → 고급에서 조건 범위를 사용하고, 각 대안을 별도의 행에 적은 뒤 다른 장소에 복사를 선택해 결과를 다른 곳에 쓰세요.
숫자 필터가 엉뚱한 행을 돌려주는 이유는 무엇인가요?
열이 텍스트로 저장되어 있어 값이 사전순으로 비교되고 있을 가능성이 큽니다. '9000'이 '10000'보다 뒤에 정렬됩니다. 열을 숫자로 변환하거나, 숫자로 처리하는 도구를 사용하세요.

mygems — CSV Editor와 Smart CSV Viewer를 만듭니다. 두 앱 모두 스프레드시트가 큰 파일 앞에서 손을 들기 때문에 생겼습니다.