Dê uma olhada em yq , que é o wrapper YAML para jq
.
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.
Dê uma olhada em yq , que é o wrapper YAML para jq
.
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.
Tags text-processing linux yaml