Substituir palavra no arquivo - comando UNIX

0

Como posso substituir 'word' no meu arquivo por um contador:

{"word":"resolucion","count":40723},{"word":"general","count":20976},
{"word":"","count":13334},{"word":"publica","count":12379},
{"word":"direccion","count":11958},{"word":"secretaria","count":9907},
{"word":"al","count":9324},{"word":"orden","count":8604},
{"word":"anuncia","count":8589},{"word":"concurso","count":6953},
{"word":"diciembre","count":6893},{"word":"adjudicacion","count":6762},
{"word":"estado","count":6154},{"word":"procedimiento","count":5694},
{"word":"julio","count":5598},{"word":"marzo","count":5440},
{"word":"-","count":5437},{"word":"convocatoria","count":5319},
{"word":"ayuntamiento","count":5259},{"word":"publico","count":5203},
{"word":"junio","count":4995},{"word":"convenio","count":4925},
{"word":"real","count":4916},{"word":"febrero","count":4896},
{"word":"proyecto","count":4826},{"word":"abierto","count":4782},

Por exemplo:

{"0":"resolucion","count":40723},{"1":"general","count":20976},
{"2":"","count":13334}, {"3":"publica","count":12379},
{"4":"direccion","count":11958},{"5":"secretaria","count":9907},
{"6":"al","count":9324},{"7":"orden","count":8604},
{"8":"anuncia","count":8589},

e assim por diante.

    
por Marc Ortiz 06.08.2013 / 14:17

3 respostas

0

Aqui está uma possível solução com nossos amigos grep e sed . Isso é bom para arquivos pequenos, caso contrário, uma solução perl (ou awk ?) Terá muito mais desempenho. Esta é a sintaxe bash :

i=1
maxnum=$(grep -o '\<word\>' datafile | wc -l)
while (( i <= maxnum )); do
  sed -i "s/word/$i/" datafile
  (( i++ ))
done

grep -o conta o número total de palavra em datafile . Isso é de Glenn . O único truque aqui é que sed não está funcionando globalmente, substituindo apenas a primeira string correspondente. É por isso que esse código é tão lento, pois invoca sed maxnum vezes em todo o arquivo de dados.

Esteja ciente de que sed -i altera seu arquivo de dados original, portanto, faça uma cópia primeiro.

    
por 06.08.2013 / 15:29
0

Se for um arquivo JSON, você pode usar alguma linguagem de script para modificá-lo. Por exemplo, se você tiver o NodeJS instalado, poderá executar o seguinte programa:

var data = require('./data.json')

console.log(data)

data.forEach(function (obj, idx) { obj[idx] = obj['word']; delete obj.word; });

console.log(data)

Suponho que o arquivo tenha o nome 'data.json' e que seja uma sintaxe JSON válida (a sua não é bem assim: você está perdendo o envolvimento [ ] e você tem um espúrio , no fim.

    
por 06.08.2013 / 15:53
0

Isso deve ser bem rápido.

perl -0 -ne 's/"word"/q{"} . $x++ . q{"}/ge; print;' INFILE > OUTFILE
    
por 29.08.2013 / 12:26