Chinaunix

标题: 如何理解awk 'BEGIN{OFS="\n"}{$1=$1;print $0}' [打印本页]

作者: carllai    时间: 2013-11-21 11:57
标题: 如何理解awk 'BEGIN{OFS="\n"}{$1=$1;print $0}'
比如例子, 要将空格分隔开的4个数字按照提行的方式打印,

echo 1 2 3 4 | awk 'BEGIN{OFS="\n"}{$1=$1;print $0}',

OFS改变以换行符为分隔符,这个还能理解, 后面的操作部分,{$1=$1;print $0}, 打印$0可以理解,但是$1=$1是什么意思?

这个还有另外一个写法,echo 1 2 3 4 | awk 'BEGIN{OFS="\n"}{NF+=0;print $0}', 如何理解NF+=0
作者: reyleon    时间: 2013-11-21 12:01
为了使OFS的设置生效,需要改变 $0 ,这里我们是对 awk 撒了个小谎
$1=$1 或者 NF+=0, $0 本身的内容实际上没有任何改变,只是为了使 OFS 的设置生效

去看看: http://bbs.chinaunix.net/thread-1790335-1-1.html
作者: yestreenstars    时间: 2013-11-21 12:17
如果我们不对字段进行操作的话,就算改变了OFS,最后的输出结果还会是原来的样子,$1=$2和NF+=0的目的就是对字段进行操作,同时保证不改变字段的内容。
作者: zooyo    时间: 2013-11-21 12:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: carllai    时间: 2013-11-21 13:19
感谢各位。
作者: rdcwayx    时间: 2013-11-21 13:46
可以缩减成
  1. echo 1 2 3 4 | awk 'BEGIN{OFS="\n"}$1=$1'
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2