有关awk字段分隔符

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

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 什么被重新生成的例子

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航