Linux:关于awk的sub函数,求解,这个为什么和预期结果不一样呢?

2025-05-17 20:09:44
推荐回答(2个)
回答1:

  1. -F是指定域分隔符,默认情况下的域分隔符是:空格、制表符(tab),将一行分为一个个字段,你这里将分隔符指定为, ,很明显就没有第二个字段了,也就是$2是空的。

  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'

回答2:

一个小错误:你为什么要用 -F, 设置逗号为字段分隔符呢?

这里的字段分隔符明明是空格或制表符TAB,使用默认的字段分隔符就行了啊。

改为下面这样就好了:

awk '{sub(/test/,"TEST",$2);print}' test

 print 默认就是打印$0