CSV 필터링은 흔히 하나로 취급되지만 사실 두 가지 작업입니다. 조건에 맞는 행만 보는 것과, 그 행만 새 파일로 저장하는 것입니다. 첫 번째는 어떤 도구든 잘합니다. 함정은 두 번째에 있습니다. 필터링된 40행을 보여 주는 스프레드시트가 40,000행을 전부 저장해 버리기 때문입니다.
빠른 답
- 조건에 맞는 행 보기: Excel 또는 Sheets에서 데이터 → 필터를 선택하고 값을 고릅니다.
- 조건에 맞는 행만 저장하기: 필터를 적용하고, 보이는 행을 선택해 새 시트에 복사한 다음 그 시트를 저장합니다. 필터링된 결과를 바로 저장해 주는 도구를 써도 됩니다.
- 큰 파일이거나 반복할 작업: 아래의 명령 하나,
csvgrep,mlr, DuckDB 중 하나면 됩니다. - 휴대폰에서: 변환한 스프레드시트 대신 제대로 된 필터 패널이 있는 CSV 앱을 사용합니다.
Excel에서
- 데이터의 아무 셀이나 클릭하고 Ctrl+Shift+L(Mac은 ⌘+Shift+F)을 누르거나 데이터 → 필터를 선택합니다.
- 열 머리글의 화살표에서 값을 고르거나, 숫자 필터 / 텍스트 필터에서 보다 큼, 포함 같은 조건을 지정합니다.
- 여러 열의 필터를 함께 쓸 수 있습니다. 필터마다 결과가 더 좁혀집니다.
필터링된 행만 저장하려면: 보이는 범위를 선택해 복사하고, 새 시트에 붙여 넣은 뒤 그 시트를 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를 선택하세요.


Edit as SQL은 조건을 직접 고칠 수 있는 쿼리로 바꿔 줍니다. 결과를 다른 곳으로 가져가려면 행을 선택해 복사하세요. 복사본은 필터를 따르며, 스프레드시트에는 실제 셀로 붙여 넣어집니다. AI 어시스턴트에게 평범한 말로 행을 요청할 수도 있으며, 이때 전송되는 것은 열 이름뿐입니다.
iPhone과 Android에서 CSV를 위해 만든 필터 패널입니다. 유형을 반영한 조건, 적용 전에 보이는 일치 행 수, 원할 때 쓰는 SQL, 그리고 업로드는 전혀 없습니다.
기능match any 또는 match none 그룹으로 조건을 조합하는 것은 Pro 기능이며, 단순한 AND 조건은 무료입니다.