1

В моем проекте у меня так много файлов с именем «config.csv». Мое требование состоит в том, чтобы добавить Конфигурацию в конец файла на основе определенных ограничений.

- Get All config.csv files across the project.
- The config.csv should have 7 columns.
- Add if the property does not exist then add one at the end of the file.
- Sometimes there might be a new line character at the end. sometimes there might not be.

Свойство выглядит следующим образом.

1/1/1970,,propertyName,"Description of the Config","false",,1

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

Отказ от ответственности: я новичок в написании сценариев и хочу максимально автоматизировать процесс выполнения этой задачи.

1 ответ1

1

Создайте следующие файлы:

add_conf.awk:

BEGIN {FS=","}
NF!=7 {bad=1; exit 1}
      {print}
END   {if (!bad) print "1/1/1970,,propertyName,\"Description of the Config\",\"false\",,1"}

add_conf.sh:

#!/bin/sh
tempfile=$(mktemp)

for f
do
        if awk -f add_conf.awk "$f" > "$tempfile"
        then
                cp "$tempfile" "$f"
        fi
done

rm "$tempfile"

и выполните chmod +x add_conf.sh .  (Конечно, вы можете поместить эти файлы в другое место, кроме текущего каталога; просто измените ссылки на имена файлов соответствующим образом.)  Тогда делай

find . -name config.csv -type f -exec ./add_conf.sh {} +

Команда find найдет все простые файлы с именем config.csv и передаст их имена (path) в add_conf.sh .  Этот скрипт вызывает awk для каждого из файлов, записывая вывод во временный файл.  Если процесс awk сообщает об успехе, скрипт затем копирует выходные данные обратно во входной файл.

Скрипт awk add_conf.awk устанавливает разделитель полей (FS) в запятую (что очевидно при работе с файлом, разделенным запятыми).  Если он сталкивается с какой - либо линии , которая имеет, кроме семи (разделенных запятыми) полей, он устанавливает bad флаг и выходит со статусом 1, так что сценарий оболочки будет видеть , что этот файл в неквалификационными и оставит его в покое.  В противном случае он печатает каждую строку ввода во (временный) выходной файл.  Он добавит новую строку в последнюю строку, если это необходимо.  Затем, если файл был в порядке до конца, добавьте новую строку данных.

Заметки:

  • Выше написано для GNU awk .  POSIX awk не определяет поведение для входных данных, не заканчивающихся символом новой строки, и не поддерживает команду exit .
  • Я проигнорировал ваш третий пункт: « если свойство не существует, добавьте его в конец файла».  Это может быть легко добавлено, если вы поясните, что вы имеете в виду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .