如何在awk中为变量着色
我有一个工作完美的awk命令:如何在awk中为变量着色,awk,colors,Awk,Colors,我有一个工作完美的awk命令: awk '{a[$1]++}END{for(i in a){printf i"\t"a[i]"\n"}}' infile 它以1美元计算重复次数。输出如下所示: MTRFHLILLPLLFSWFSYCFG_1 1 MLAELSVAFTLAAFALA_rc_1 3 RED='\033[01;31m' NONE='\033[0m' awk -v r=$RED -v n=$NONE '{printf r$1n&
awk '{a[$1]++}END{for(i in a){printf i"\t"a[i]"\n"}}' infile
它以1美元计算重复次数。输出如下所示:
MTRFHLILLPLLFSWFSYCFG_1 1
MLAELSVAFTLAAFALA_rc_1 3
RED='\033[01;31m'
NONE='\033[0m'
awk -v r=$RED -v n=$NONE '{printf r$1n"\n"}' infile
1 #See how the first half of the output (i) is missed and is not coloured.
3
我想把输出变成红色\033[01;31米
通常,当我想用awk为输出着色时,我会这样做:
MTRFHLILLPLLFSWFSYCFG_1 1
MLAELSVAFTLAAFALA_rc_1 3
RED='\033[01;31m'
NONE='\033[0m'
awk -v r=$RED -v n=$NONE '{printf r$1n"\n"}' infile
1 #See how the first half of the output (i) is missed and is not coloured.
3
我用上面描述的命令尝试了这一点(计算$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
输出如下所示:
MTRFHLILLPLLFSWFSYCFG_1 1
MLAELSVAFTLAAFALA_rc_1 3
RED='\033[01;31m'
NONE='\033[0m'
awk -v r=$RED -v n=$NONE '{printf r$1n"\n"}' infile
1 #See how the first half of the output (i) is missed and is not coloured.
3
有人能解释一下为什么这不起作用,并帮我修复它吗
谢谢因为问题只是说代码“不起作用”,而没有说它以什么方式不起作用,下面列出了代码中可能导致它“不起作用”的因素:
r=“$RED”
,而不是r=$RED
),请参见。默认情况下,引号是您必须使用并在需要时删除的,而不是在需要时添加的r
和i
的变量,可以将它们串联起来
用ri
或(r)(i)
,但如果你写ri
,那只是另一回事
变量名为ri
foo
,始终执行printfoo“%s”,foo
,而不是printfoo
,因为只要foo
包含打印格式字符,例如%s
,后者就会失败seq 3 | awk -v r="$red" -v n="$none" '{a[$1]++}END{for(i in a){printf "%s%s\t%s%s\n", r, i, a[i], n}}'
1 1
2 1
3 1
不清楚为什么要将颜色定义为shell变量并将这些值传递给awk,而不仅仅是在awk中定义它们:
seq 3 | awk '
BEGIN {
red = "\033[01;31m"
none = "\033[0m"
}
{ printf "%s%s%s\n", red, $1, none }
'
1
2
3
(上面所有的输出都是红色的,老实说!)
它不工作
是最糟糕的问题陈述,因为它没有告诉我们任何关于调试问题的有用信息。还有该陈述所指的脚本,awk-vr=$red-vn=$NONE'{printfr$1n'\n}“infle
,实际上起到了误导作用,只是你问题后面的脚本不起作用。谢谢你的帮助-非常感谢。抱歉,我应该更清楚地说明代码在哪些方面不起作用。由于你修改了你的答案,表明我写问题的方式不正确,我将离开解决方案2解决了这个问题,所以我认为问题在于变量的串联。但是,通过阅读链接等,我使用的方法似乎不正确/实践不佳。从现在开始,我将尝试正确地做事情。Thanks:)