awkは標準入力からプログラムと入力を読み取ることができますか?
ファイルを次の関数にパイプできるようにしたいです。
process_data () {
awk -f - <<EOF
{print}
EOF
}
注:実際のプログラムは長く、コマンドライン引数として渡すことはできず、一時ファイルを使用したくありません。
現在は何も出力しません。
$ yes | head | process_data
$
ベストアンサー1
process_data() {
awk -f /dev/fd/3 3<< \EOF
awk code here
EOF
}
コマンドライン引数には改行文字を含めることができ、長さ制限がありますが、通常は数百キロバイトを超えます。
awk '
BEGIN {...}
/.../ ...
END {...}
'
問題がawk
スクリプトに一重引用符文字を含めることに関連する場合、別のアプローチはコードを変数に保存することです。
awk_code=$(cat << \EOF
{print "'quoted' " $0}
EOF
)
そして、次のことを行います。
process_data() {
awk "$awk_code"
}