【发布时间】:2021-06-08 10:26:39
【问题描述】:
我有一个运行良好的 awk 命令:
awk '{a[$1]++}END{for(i in a){printf i"\t"a[i]"\n"}}' infile
它计算 $1 中的重复次数。输出如下所示:
MTRFHLILLPLLFSWFSYCFG_1 1
MLAELSVAFTLAAFALA_rc_1 3
我想让输出变为红色。 \033[01;31m
通常,当我想在 awk 中为输出着色时,我会这样做:
RED='\033[01;31m'
NONE='\033[0m'
awk -v r=$RED -v n=$NONE '{printf r$1n"\n"}' infile
我用上面描述的命令尝试了这个(计算 $1 中的重复次数),但它不起作用。我认为这是因为 awk 无法将 r 和 i 识别为单独的变量,例如,在 bash 中我会使用 $r$i。是这样吗?
这是我尝试过的命令:
awk -v r=$RED -v n=$NONE '{a[$1]++}END{for(i in a){printf ri"\t"a[i]"\n"n}}' infile
输出如下:
1 #See how the first half of the output (i) is missed and is not coloured.
3
谁能解释为什么这不起作用并帮助我解决它?
谢谢
【问题讨论】:
-
it doesn't work是最糟糕的问题陈述,因为它没有告诉我们任何有用的问题来调试它。此外,该语句引用的脚本awk -v r=$RED -v n=$NONE '{printf r$1n"\n"}' infile实际上确实有效,这具有误导性,只是您问题后面的脚本无效。