このページの内容

入出力

現在のjqの入出力機能は最小限で、主に、いつ入力を読むかを制御する形で提供されています。このために、組込み関数 input と inputs があります。これらは、jq自体と同じ入力元(たとえば stdin や、コマンドラインで指定したファイル)から読み込みます。この2つの組込み関数と、jq自体の読込みは、互いに交互に実行できます。一般に、入力を1つ暗黙に読み込むのを防ぐため、null入力オプション -n と組み合わせて使います。

最小限の出力機能を提供する組込み関数は、debug と stderr です。jqプログラムの出力値は、常にJSONテキストとして stdout に出力されることを思い出してください。組込み関数 debug は、アプリケーション固有の動作を持つ場合があります。たとえば、libjqのC APIを使う、jq実行ファイル自体とは異なる実行ファイルの場合です。組込み関数 stderr は、入力をそのままの形式でstderrへ出力し、装飾は一切付けず、改行さえ付けません。

jqの組込み関数の多くは参照透過です。一定の入力に適用すると、一定で再現可能な値のストリームを生成します。入出力の組込み関数は、これに当てはまりません。

input

新しい入力を1つ出力します。

input を使う場合、通常はコマンドラインオプション -n を指定してjqを起動する必要があります。そうしないと、最初の入力が失われることに注意してください。

echo 1 2 3 4 | jq '[., input]' # [1,2] [3,4]

inputs

残っている入力を、1つずつすべて出力します。

これは、主にプログラムの入力全体に対して集約処理を行う際に便利です。inputs を使う場合、通常はコマンドラインオプション -n を指定してjqを起動する必要があります。そうしないと、最初の入力が失われることに注意してください。

echo 1 2 3 | jq -n 'reduce inputs as $i (0; . + $i)' # 6

debug, debug(msgs)

この2つのフィルターは . と同様ですが、副作用としてstderrに1つ以上のメッセージを生成します。

フィルター debug が生成するメッセージは、次の形式です。

["DEBUG:",<input-value>]

ここで、<input-value> は、入力値をコンパクトに表したものです。この形式は、将来変わる可能性があります。

フィルター debug(msgs) は、(msgs | debug | empty), . と定義されています。そのため、メッセージの内容を柔軟に指定でき、複数行のデバッグ文も作れます。

たとえば、次の式は、

1 as $x | 2 | debug("Entering function foo with $x == \($x)", .) | (.+1)

値3を生成しますが、次の2行をstderrへ書き出します。

["DEBUG:","Entering function foo with $x == 1"]
["DEBUG:",2]

stderr

入力をそのままのコンパクトな形式でstderrへ出力します。装飾は一切付けず、改行さえ付けません。

input_filename

現在フィルターで処理している入力のファイル名を返します。jqをUTF-8ロケールで実行していない場合、うまく動作しないことに注意してください。

input_line_number

現在フィルターで処理している入力の行番号を返します。