Crie os seguintes arquivos:
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"
e faça chmod +x add_conf.sh
. (Claro que você pode colocar esses arquivos
em algum lugar diferente do diretório atual;
apenas ajuste as referências do nome do arquivo de acordo.) Então faça
find . -name config.csv -type f -exec ./add_conf.sh {} +
O comando find
encontrará todos os arquivos simples chamados config.csv
e passar seus nomes (caminho) para add_conf.sh
.
Esse script invoca awk
em cada um dos arquivos,
escrevendo a saída para um arquivo temporário.
Se o processo awk
informar sucesso,
o script copia a saída de volta sobre o arquivo de entrada.
O script awk
, add_conf.awk
, define o separador de campo (FS) como vírgula
(o que é óbvio quando se lida com um arquivo separado por vírgula).
Se encontrar qualquer linha que tenha outros campos que não sejam sete (separados por vírgula),
ele define o sinalizador bad
e sai com um status de 1,
de modo que o script de shell verá que esse arquivo é não qualificado
e vai deixar isso em paz.
Caso contrário, imprime cada linha de entrada no arquivo de saída (temporário).
Ele adicionará uma nova linha à última linha, se necessário.
Então, se o arquivo estiver OK até o final, adicione a nova linha de dados.
Notas:
- O texto acima foi escrito para o% GNU
awk
. POSIXawk
não especifica o comportamento dos dados de entrada que não terminam com nova linha, e não suporta o comandoexit
. - Eu ignorei sua terceira bala, " se a propriedade não existir adicione um ao final do arquivo". Provavelmente pode ser adicionado facilmente se você esclarecer o que quer dizer.