"jq" 필터를 디스크에 저장하는 좋은 메커니즘은 무엇입니까?

"jq" 필터를 디스크에 저장하는 좋은 메커니즘은 무엇입니까?

일반적인 사용법

jq [options] <jq filter> [file...]

예를 들어, 파일을 예쁘게 인쇄하려면 다음과 같이 작성합니다.

jq -s '.' input.json output.json

그러나 프로그램이 <filter>성장함에 따라 완전한 프로그램으로 디스크에 저장하는 것이 더 깔끔합니다.

다음과 같은 이유로 이를 수행할 수 있습니다.

  1. 우리는 여러 컨텍스트/파일에서 필터를 사용하며 잘라내어 붙여넣는 위험을 감수하고 싶지 않습니다.
  2. Makefile에 필터를 저장한다는 것은 코드를 읽기 어렵게 만드는 후행 백슬래시를 도입해야 함을 의미합니다.
  3. 운이 좋다면 일부 편집기에는 코드에서 미묘한 오류를 더 쉽게 발견할 수 있는 모드가 있을 수 있습니다.

가장 좋은 방법 awk(CSV 파일의 경우 jq가 JSON 파일의 경우와 유사함)은 .awk파일을 확장명으로 저장하고 실행 가능하게 만든 후 첫 번째 줄에 작성하는 것입니다.

#!/usr/bin/awk -f

또는

#!/opt/local/bin/gawk -f

jq디스크에 필터를 저장하는 좋은 메커니즘은 무엇입니까?

답변1

당신도 같은 일을 할 수 있습니다. 에서 man jq:

   ·   -f filename / --from-file filename:

       Read  filter  from  the  file rather than from a command line, like
       awk´s -f option. You can also use ´#´ to make comments.

예를 들어:

$ cat myfilter.jq
#!/usr/bin/jq --from-file

.[].foo // empty

실행 가능한지 확인하세요.

$ chmod +x myfilter.jq

그 다음에

$ printf '[{"foo": "bar"},{"goo": "bar"},{"foo": "bam"}]' | ./myfilter.jq
"bar"
"bam"

관련 정보