sed를 활용한 대용량 텍스트 파일 검색 (feat. JQ)
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로 작업 해야겠다는 생각이 든다.