sed를 활용한 대용량 텍스트 파일 검색 (feat. JQ)

Jeongkuk Seo
sjk5766
Published in
3 min readJun 30, 2024

OTT 관련 데이터들을 외부에 제공하고 있다. 데이터들은 json 형식으로 배치를 통해 생성되고 S3에 업로드 된다. 기존 기능에 버그가 있어서 코드를 수정하고 배치를 돌린 후 데이터를 확인해야 하는데 용량이 커서 Chrome 에선 열리지 않는다. Safari 브라우저에서는 열리지만 용량이 100MB 가까이 되면 검색이 더 이상 검색이 아니게 된다.

최근에 대용량 파일의 데이터를 확인해야 하는데, sed, awk 같은 생각을 못해서 방법을 파악하느라 생각보다 시간을 잡아먹었다. 몇 가지 케이스와 명령어를 기록해둔다.

특정 데이터가 몇 개 인지 확인이 필요한 상황
개봉일이 2024년인 영화가 몇 개인지 파악해야 하는 상황이 있었다. 이때 아래와 같은 명령어로 확인이 가능하다.

sed 's/{/{\n/g' ott.json | grep 'openDate":"2024' | wc -l

sed 다음에 나오는 's/{/{\n/g' 패턴은 json 시작 문자인 {{\n 으로 줄바꿈 하겠다는 의미다. 기본적으로 아래와 같은 데이터를

[{id:1,openDate:"2024-01-01",...},{id:2,openDate:"2024-01-02",...},{id:3,openDate:"2024-01-03",...}]

아래와 같이 줄바꿈을 넣어 개수를 셀 수 있는 구조로 변경한다.

[{ 
id:1,openDate: "2024-01-01",...},{
id:2,openDate: "2024-01-02",...},{
id:3,openDate: "2024-01-03",...}]

이후 grep 으로 개봉일이 2024년인 영화만 찾고 wc -l 명령어로 개수를 셀 수 있다.

특정 데이터를 찾아 버그가 잘 수정되었는지 확인해야 하는 상황
특정 데이터를 찾는다면 아래와 같이 wc -l 을 제거해 직접 보이도록 하면 된다. 예를 들어 아래는 id가 2번인 작품의 prices 배열 정보를 확인한다.

grep으로 데이터가 바로 보이면 다행이지만, 위 이미지처럼 원하는 데이터가 같이 나오지 않으면 grep에 A 옵션을 줘서 매칭된 이후 몇 라인까지 나오게 할지 정할 수 있다.

블로그를 쓰는 시점에 sed에 대해 검색하다 보니 JQ라는 것을 알게 되었다. JQ는 json 데이터를 쉽게 다루도록 하는 sed와 같은 도구다. 2015년에 1.0 버전이 나왔는데 왜 이제야 알게된건지..

조금 검색해서 아래의 명령어를 수행해보니, 다음엔 JQ로 작업 해야겠다는 생각이 든다.

--

--