Вопрос или проблема
Мой код генерирует несколько файлов json, все они выглядят примерно так:
{
"instance": "sample_instance_05",
"steps": [
{
"129": "North",
"14": "North",
"82": "North",
"53": "North",
"149": "North",
"6": "North",
"79": "North",
"40": "North",
"151": "North",
Эти файлы находятся в одной директории. Мой начальник только что сказал мне, что я должен был генерировать данные с N
для North
, S
для South
, E
для East
и W
для West
.
Поскольку создание этих файлов данных заняло довольно много времени, я не хочу запускать код снова для такой простой замены текста. AWK/SED/GREP и т.д. – это очевидно инструменты для этого (я немного пользовался AWK ранее, но сейчас я немного подзабыл).
Существует ли более простой цикл Bash + AWK, который позволяет преобразовать все строки в файле, как указано?
sed
метод
Я предлагаю использовать sed
. Следующее должно работать для замены всех экземпляров word_1
на word_2
в myfile.json
.
$ sed -i 's/word_1/word_2/g' myfile.json
Например, чтобы изменить “North” на “N”:
$ sed -i 's/North/N/g' myfile.json
Обратите внимание, что флаг -i
вызовет редактирование на месте, и данные будут немедленно изменены.
awk
метод
Вы также можете использовать awk
следующим образом:
$ awk '{gsub(/word_1/,"word_2")}1' myfile.json > patchedfile.json
Ответ или решение
Чтобы заменить слова в JSON-файлах, используя AWK, вы можете следовать следующему решению, которое предлагает систематический и эффективный подход к автоматизации этой задачи. Вашей целью является замена вхождений направлений "North", "South", "East" и "West" на их односимвольные эквиваленты "N", "S", "E" и "W" соответственно. Для этого можно использовать AWK в комбинации с Bash, что позволит вам обработать все файлы в директории.
Зачем это нужно?
Задача стоит в том, чтобы оптимизировать процесс исправления генерированных данных, не перезапуская все вычисления, что может занять значительное время. Использование скриптов позволяет автономно и без ошибок произвести массовую замену слов.
Как это сделать?
Следующий скрипт Bash с использованием AWK выполнит задачу описанную выше:
#!/bin/bash
# Проходим по всем JSON-файлам в текущей директории
for file in *.json; do
# Проверяем, что это действительно файл
if [[ -f $file ]]; then
# Используем AWK для замены
awk '{
gsub(/North/, "N");
gsub(/South/, "S");
gsub(/East/, "E");
gsub(/West/, "W");
print
}' "$file" > "temp_$file"
# Перемещаем временный файл обратно в оригинальный
mv "temp_$file" "$file"
echo "Файл $file успешно обновлен."
fi
done
Расшифровка кода
- Цикл
for
: Обрабатывает каждый файл с расширением.json
в текущей директории. - Условие
if
: Проверяет, является ли элемент директивой файла. - Команда
awk
:gsub(/pattern/, "replacement")
: Замена всех вхождений шаблона на заданную подстроку.print
: Печатает строку, уже модифицированную и обработанную.
- Операции с файлами:
- Создание временного файла с изменениями.
- Замена оригинального файла временным.
Почему AWK?
AWK удобен и эффективен для обработки текстовых данных, где необходимо изменить содержимое строк, не нарушая структуру исходного файла. Он позволяет выполнять замены по шаблону даже в крупных текстах с минимальными усилиями.
Вывод
Следуя данному подходу, вы сможете эффективно исправить свои данные, оставшиеся без изменений на генерирующей стороне, и тем самым сохранить рабочее время и ресурсы. Этот метод опирается на проверенные сигналы и четкие инструкции каждой команды, не оставляя места для ошибок.
Эти шаги являются оптимальными с точки зрения времени выполнения и простоты, что делает их важным навыком в арсенале администратора системы или разработчика данных.
Для оптимального охвата совпадений и экономии времени, скрипт облегчит аккуратную и быструю замену в вашем проекте.