args가 포함된 폴더에 .yaml 파일의 스프레드시트를 생성해 보세요.

args가 포함된 폴더에 .yaml 파일의 스프레드시트를 생성해 보세요.

.yaml 파일로 가득 찬 폴더가 있습니다. 각 yaml 파일에는 URL 인수 등이 있습니다. 첫 번째 열에 파일 이름이 포함되고 두 번째 열에 URL 인수 값이 포함된 스프레드시트를 가져오고 싶습니다. 이를 수행하는 간단한 콘솔 명령이 있습니까?

yaml 파일에서는 기본적으로 다음과 같습니다.

매개변수:

- {인수: 파일 이름, 값: "테스트파일"}

- {인수: URL, 값: "fakesite.com"}

목표는 폴더의 각 yaml 파일에 대해 이 두 값을 나란히 나열하는 스프레드시트를 만드는 것입니다.

답변1

구경하다yq,그것은 jq.

답변2

파일의 경우:

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"}

거짓 긍정을 줄이기 위해 grep 패턴의 범위를 좁혀야 할 수도 있습니다.

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

따라서 파일 이름을 수집하기 위해 for 루프를 사용하여 find 또는 단순 디렉터리를 사용할 수 있습니다. 파일 이름에 공백이나 이상한 문자가 없나요?

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"}

또는 더 나은 가독성

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

거기서부터는 한 걸음만 하면 됩니다.

관련 정보