awkを介してパイプから受信した入力にプレフィックスを追加し、条件付きでプレフィックスの色を指定する方法は?

awkを介してパイプから受信した入力にプレフィックスを追加し、条件付きでプレフィックスの色を指定する方法は?

次の方法で受信(およびフィルタリング)された行にプレフィックスを追加する方法はありますかawk?はい、わかりました。それはこれまでは条件付きで(たとえば、$PS1周辺のBashスクリプトや変数の存在によって[ -t 1 ])ANSIエスケープシーケンスを使用して色を指定することは可能ですか?

私はアンカーと2つの異なる方法を使用してプレフィックスを追加する方法を知っています^echoprintf

awkインラインスクリプト内で評価できる条件に基づいて、概要に従って生成された出力の色をどのように指定できますかawk

注:私が所有またはmawk処分gawkできるのはmawkデフォルトです。

答え1

if [ -t 1 ]; then
  eval "$(printf 'COLOR_ON="\033[31m" COLOR_OFF="\033[m"')"
else
  COLOR_ON= COLOR_OFF=
fi
export COLOR_ON COLOR_OFF
awk '{print ENVIRON["COLOR_ON"] "prefix: " ENVIRON["COLOR_OFF"] $0}'

または:

[ ! -t 1 ]
awk -v color="$?" '{
   print((color ? "\033[31m" : "") "prefix: " (color ? "\033[m" : "") $0)}'

答え2

以下で端末を確認できます。

> echo foo | awk '{if (system("tty >/dev/null 2>&1")) print "true"; else print "false";}'
true

関連情報