$1=$1的解释?

有一文本类似 "aaa bbb ccc" 需求是把中间的分隔符替换成竖线" | "
比较直观的结果如下: echo "aaa bbb ccc" | nawk '{print $1"|"$2"|"$3}'
比较高深的结果如下: echo "aaa bbb ccc" | nawk 'BEGIN{OFS="|"} {$1=$1;print}'
                        或者: echo "aaa bbb ccc" | nawk 'OFS="|"{$1=$1;print}'
比较简单的结果如下: echo "aaa bbb ccc" | sed 's/ /|/g'
对于$=$1的解释如下 :
       通常情况下,awk是不对$0(原始的行数据)进行处理(我只知道gnu awk是这样的,其他版本的awk是否是这样不得而知)  
        print如果不带参数,就表示 print $0       用$1=$1,就是强制awk对原始数据进行处理
        其实,{$1=$1;print}的代码可以直接简化成$1=$1    awk的代码分为   条件{动作},如果{动作}省略的话,缺省使用{print $0}   $1=$1是一个赋值语句,永远是真的
        修正一下,$1=$1 实际上先用$1做条件判断,然后再做赋值操作,因此,如果$1=0或者$1为空,就是长度为0的字符串的话,条件就是假了。因此,用$1=$1代替{$1=$1;print}的做法是不严谨的。
       不过,如果不设置FS,那么awk的缺省会用空白符做FS,因此不会出现$1为空的情况,因此就有可能存在$1=0的情况

你可能感兴趣的:($1=$1的解释?)