Замена слов на указанные слова с помощью AWK

Вопрос или проблема

Мой код генерирует несколько файлов 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

Расшифровка кода

  1. Цикл for: Обрабатывает каждый файл с расширением .json в текущей директории.
  2. Условие if: Проверяет, является ли элемент директивой файла.
  3. Команда awk:
    • gsub(/pattern/, "replacement"): Замена всех вхождений шаблона на заданную подстроку.
    • print: Печатает строку, уже модифицированную и обработанную.
  4. Операции с файлами:
    • Создание временного файла с изменениями.
    • Замена оригинального файла временным.

Почему AWK?

AWK удобен и эффективен для обработки текстовых данных, где необходимо изменить содержимое строк, не нарушая структуру исходного файла. Он позволяет выполнять замены по шаблону даже в крупных текстах с минимальными усилиями.

Вывод

Следуя данному подходу, вы сможете эффективно исправить свои данные, оставшиеся без изменений на генерирующей стороне, и тем самым сохранить рабочее время и ресурсы. Этот метод опирается на проверенные сигналы и четкие инструкции каждой команды, не оставляя места для ошибок.

Эти шаги являются оптимальными с точки зрения времени выполнения и простоты, что делает их важным навыком в арсенале администратора системы или разработчика данных.


Для оптимального охвата совпадений и экономии времени, скрипт облегчит аккуратную и быструю замену в вашем проекте.

Оцените материал
Добавить комментарий

Капча загружается...