Tentando gerar uma planilha de arquivos .yaml dentro de uma pasta, incluindo args

1

Eu tenho uma pasta cheia de arquivos .yaml. em cada arquivo yaml eu tenho uma URL entre outras coisas. Eu estou apenas tentando obter uma planilha que tem o nome do arquivo na primeira coluna e ter o valor do arg url na segunda coluna. existe um comando de console simples que pode fazer isso?

no arquivo yaml, parece essencialmente assim

args:

- {arg: file_name, value: "testfile"}

- {arg: url, value: "fakesite.com"}

o objetivo é ter uma planilha onde esses dois valores são listados lado a lado para cada arquivo yaml na pasta.

    
por Teddy 23.02.2018 / 20:22

2 respostas

0

Dê uma olhada em yq , que é o wrapper YAML para jq .

    
por 24.02.2018 / 08:10
0

Para um arquivo:

res=$(echo 'args:

- {arg: file_name, value: "testfile"}

- {arg: url, value: "fakesite.com"}' | egrep "file|url")
echo $res
- {arg: file_name, value: "testfile"} - {arg: url, value: "fakesite.com"}

Talvez seja necessário restringir o padrão do grep para reduzir os falsos positivos:

egrep -- "- \{arg: (file_name|url), value: ")

Portanto, coletar os nomes de arquivos pode ser feito com find ou com um diretório simples apenas com um loop for. Você não tem espaços em branco em nomes de arquivos ou personagens engraçados?

for f in *.yaml; do res=$(egrep -- "- \{arg: (file_name|url), value: " $f); echo $res; done > yaml.csv 
cat yaml.csv 
- {arg: file_name, value: "testfile"} - {arg: url, value: "fakesite.com"}
- {arg: file_name, value: "testfile"} - {arg: url, value: "fakesite.com"}

Ou melhor legível

for f in *.yaml
do 
  res=$(egrep -- "- \{arg: (file_name|url), value: " $f)
  echo $res
done > yaml.csv 

De lá, deve ser apenas um passo.

    
por 24.02.2018 / 08:46