Заменить слово в файле - команда UNIX
Как я могу заменить слово в моем файле для счетчика:
{"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},
Например:
{"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},
и так далее.
3 ответа
Если это файл JSON, вы можете использовать некоторый язык сценариев для его изменения. Например, если у вас установлен NodeJS, вы можете запустить следующую программу:
var data = require('./data.json')
console.log(data)
data.forEach(function (obj, idx) { obj[idx] = obj['word']; delete obj.word; });
console.log(data)
Я предполагаю, что файл с именем "data.json" и что это правильный синтаксис JSON (ваш не совсем так: вы пропускаете упаковку [
]
и у вас есть поддельные ,
в конце.
Это должно быть довольно быстро.
perl -0 -ne 's/"word"/q{"} . $x++ . q{"}/ge; print;' INFILE > OUTFILE
Вот одно из возможных решений с нашими grep
а также sed
друзья. Это хорошо для небольших файлов, в противном случае perl
(или же awk
?) Решение будет намного более производительным. Это bash
синтаксис:
i=1
maxnum=$(grep -o '\<word\>' datafile | wc -l)
while (( i <= maxnum )); do
sed -i "s/word/$i/" datafile
(( i++ ))
done
grep -o
подсчитывает общее количество слов в datafile
, Это из Гленна. Единственный трюк здесь в том, что sed
не работает глобально, поэтому замена только первой подходящей строки. Вот почему этот код так медленно, как он вызывает sed
максимальное количество раз на весь файл данных.
Быть в курсе, что sed -i
изменяет исходный файл данных, поэтому сначала сделайте копию.