Veja como você solicitou especificamente uma solução Awk:
awk -F\" '$4 !~ /eprints.ulster.ac.uk\/view/' file > newfile
Eu tenho um arquivo JSON delimitado por nova linha com entradas como esta:
{"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/"}
Eu só quero blocos onde o .id
não comece com "eprints.ulster.ac.uk/view/"
Portanto, se o script foi executado no trecho de código acima, os primeiros 3 blocos seriam excluídos e os únicos blocos restantes seriam:
{"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/"}
Alguém pode ajudar a escrever um script awk
para fazer isso?
Uma solução com jq
.
cat test.json| jq 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )'
A sintaxe é bem simples se você estiver familiarizado com pipes.
Por exemplo
.id|startswith("eprints.ulster.ac.uk/view/")|not
significa que ele pega o campo .id
de cada objeto e o canaliza através de startswith
, que retorna um booleano e o booleano é negado.
Dê uma olhada no manual de jq
para mais operadores e seletores.
Para quem estiver interessado, passo a solução do Raphael para um novo arquivo JSON com este comando:
cat uir-index.json| jq 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )' > cleaned-uir-index.json
O formato de saída retornou aos blocos de código de várias linhas. Eu corri o mesmo comando jq com a opção "--compact-output / -c" assim:
cat uir-index.json| jq -c 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )' > cleaned-uir-index.json
Esta saída o arquivo limpo em formato de nova linha.