JSON에서 블록을 삭제하는 awk 스크립트

JSON에서 블록을 삭제하는 awk 스크립트

다음과 같은 항목이 포함된 개행으로 구분된 JSON 파일이 있습니다.

{"id":"eprints.ulster.ac.uk/view/year/2015.html","title":"Items where Year is 2015 - Ulster Institutional Repository","url":"eprints.ulster.ac.uk/view/year/2015.html"}
{"id":"eprints.ulster.ac.uk/view/year/2016.html","title":"Items where Year is 2016 - Ulster Institutional Repository","url":"eprints.ulster.ac.uk/view/year/2016.html"}
{"id":"eprints.ulster.ac.uk/view/year/2017.html","title":"Items where Year is 2017 - Ulster Institutional Repository","url":"eprints.ulster.ac.uk/view/year/2017.html"}
{"id":"eprints.ulster.ac.uk/10386/","title":"Structural performance of rotationally restrained steel columns in fire - Ulster Institutional Repos","url":"eprints.ulster.ac.uk/10386/"}
{"id":"eprints.ulster.ac.uk/10387/","title":"Determining the Effective Length of Fixed End Steel Columns in Fire - Ulster Institutional Repositor","url":"eprints.ulster.ac.uk/10387/"}

.id나는 다음으로 시작하지 않는 블록 만을 원합니다 ."eprints.ulster.ac.uk/view/"

따라서 위의 코드 조각에서 스크립트가 실행되면 처음 3개 블록이 제거되고 나머지 블록은 다음과 같습니다.

{"id":"eprints.ulster.ac.uk/10386/","title":"Structural performance of rotationally restrained steel columns in fire - Ulster Institutional Repos","url":"eprints.ulster.ac.uk/10386/"}
{"id":"eprints.ulster.ac.uk/10387/","title":"Determining the Effective Length of Fixed End Steel Columns in Fire - Ulster Institutional Repositor","url":"eprints.ulster.ac.uk/10387/"}

누군가 awk이 작업을 수행하는 스크립트를 작성하는 데 도움을 줄 수 있습니까?

답변1

Awk 솔루션을 구체적으로 요청한 경우:

awk -F\" '$4 !~ /eprints.ulster.ac.uk\/view/' file > newfile

답변2

솔루션jq.

cat test.json| jq 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )'

파이프에 익숙하다면 구문은 매우 간단합니다.

예를 들어

.id|startswith("eprints.ulster.ac.uk/view/")|not

각 객체의 필드를 가져와 .id파이프를 통해 전달하는 것을 의미합니다 startswith. 이는 부울을 반환하고 부울은 무효화됩니다.

보세요수동jq더 많은 연산자와 선택기를 보려면 에서

답변3

관심 있는 분들을 위해 다음 명령을 사용하여 Raphael의 솔루션을 새 JSON 파일로 출력합니다.

cat uir-index.json| jq 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )' > cleaned-uir-index.json

출력 형식은 여러 줄의 코드 블록으로 돌아갑니다. 다음과 같이 "--compact-output/-c" 옵션을 사용하여 동일한 jq 명령을 실행했습니다.

cat uir-index.json| jq -c 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )' > cleaned-uir-index.json

그러면 정리된 파일이 개행 형식으로 출력됩니다.

관련 정보