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

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

일반적인 사용법은jq

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

예를 들어, 작성한 파일을 예쁘게 인쇄하려면

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

그러나 규모가 <filter>커지면 완전한 프로그램으로 디스크에 저장하는 것이 더 깔끔합니다.

우리는 다음과 같은 이유로 그렇게 하고 싶을 수도 있습니다:

  1. 우리는 여러 컨텍스트/파일에서 필터를 사용하고 있으며 잘라내어 붙여넣는 위험을 원하지 않습니다.
  2. Makefile에 필터를 저장한다는 것은 코드의 가독성을 떨어뜨리는 후행 백슬래시를 도입해야 함을 의미합니다.
  3. 운이 좋다면 일부 편집기에 코드의 미묘한 실수를 더 쉽게 찾아낼 수 있는 모드가 있을 수도 있습니다.

할 수 있는 가장 좋은 방법 awk(Jq가 JSON 파일에 대한 것과 같은 CSV 파일에 대한 것임)은 .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"

관련 정보