有关awk字段分隔符

echo a b c d |awk ’{OFS = ":";print $0}’

  我的理解是应该把输出显示为如下的方式

  a:b:c:d

  dan但执行的结果不是这样的

  a b c d

  为什么啊

  echo a b c d|awk ’{print $1":"$2":"$3":"$4}’

  或

  echo a b c d|awk ’BEGIN {OFS=":"}{print $1,$2,$3,$4}’

  或

  echo a b c d|awk ’{OFS=":";print $1,$2,$3,$4}’

  这个方法我知道

  我是想知道为什么OFS没起作用

  奇怪的是我改动其中一个字段的值确能显示分隔符

  echo a b c d |awk ’{OFS = ":";$2="3";print $0}’

  a:3:c:d

  原来如此,谢谢

  原来如此,是什么原因啊?

  echo a b c d |awk ’{OFS = ":";print $0}’

  错误就在这里,$0是打印这条记录,OFS对他不起作用

  echo a b c d|awk ’{OFS=":";print $1,$2,$3,$4}’ 这样就对了

  下面引用由twlogin在 2002/09/28 01:50pm 发表的内容:

  奇怪的是我改动其中一个字段的值确能显示分隔符

  echo a b c d |awk ’{OFS = ":";$2="3";print $0}’

  ...

  那改动其中一个字段的值

  如

  echo a b c d |awk ’{OFS=":";$2="b";print $0}’

  结果又对了,why?

  是不是改动其中一个字段的值后,每个字段的会自动加上OFS

  只能说awk对于OFS的改动后,中间没有提供他所有加工输出数据的机会,那OFS的改动也失效了.

  awk也是个常人写得程式.总有不周之处啊.

  在《sed和awk编程篇》中有这样一句:

  如果给字段变量赋一个新值,那么awk会自动地使用内部变量OFS重新生成$0

  该书中讲解了 $0 什么被重新生成的例子
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值