-F是指定域分隔符,默认情况下的域分隔符是:空格、制表符(tab),将一行分为一个个字段,你这里将分隔符指定为, ,很明显就没有第二个字段了,也就是$2是空的。
man awk 可知
sub(r, s [, t]) Just like gsub(), but only the first matching substring is replaced.
是指在对应字段中,仅仅将第一次匹配到的字符串进行替换。对应的还有gsub函数,在字段中替换全部匹配到的字符串。
你这里作用于$2,而$2本身就是空的,自然就没变化了。你明白了么?
awk '{sub(/test/,"TEST",$2)}1'
一个小错误:你为什么要用 -F, 设置逗号为字段分隔符呢?
这里的字段分隔符明明是空格或制表符TAB,使用默认的字段分隔符就行了啊。
改为下面这样就好了:
awk '{sub(/test/,"TEST",$2);print}' test
print 默认就是打印$0