Создайте следующие файлы:
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
.
- Я проигнорировал ваш третий пункт: « если свойство не существует, добавьте его в конец файла».
Это может быть легко добавлено, если вы поясните, что вы имеете в виду.