ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [Shell] awk $1=$1

[Shell] awk $1=$1

原创 Linux操作系统 作者:tolilong 时间:2016-05-03 15:19:09 0 删除 编辑
$1=$1 是用来激活$0的重新赋值,也就是说 字段$1...和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做
echo "A B C D" | awk '{OFS="|";print $0;$1=$1;print $0;}'
    A B C D
    A|B|C|D
   
    即使OFS放在BEGIN里,也没有用
    echo "A B C D" | awk 'BEGIN{OFS="|"}{print $0;$1=$1;print $0;}'
    A B C D
    A|B|C|D
    
$0=$0 刚好相反, 修改$0的值可以促使awk重新计算字段$1...和字段数NF的的值,通常是在改变FS后而需要输出$1...或者NF时这样做

    echo "A|B|C|D" | awk '{FS="|";print $1,NF;$0=$0;print $1,NF}'
    A|B|C|D 1
    A 4
   
    不过把修改FS放在BEGIN里,就没必要$0=$0了
    echo "A|B|C|D" | awk 'BEGIN{FS="|"}{print $1,NF;$0=$0;print $1,NF}'
    A 4
    A 4
(http://bbs.chinaunix.net/thread-3686995-1-1.html)

如下例子:
[root@oracle6 test]# cat tt2
Count: 1  MaxTime=60.15s (Total 60s)   billing[billing]@[10.226.127.70]
  select name, current_value, increment from zd.sequence where name='S'

Count: 4  MaxTime=60.13s (Total 60s)   billing[billing]@[10.226.127.70]
  update zd.sequence set current_value = current_value+increment

Count: 10  MaxTime=60.12s (Total 601s)   billing[billing]@[10.226.127.70]
  update AD.CA_QUEUE_W_6_22_9_1 set DEAL_STS = N

Count: 6  MaxTime=60.12s (Total 360s)   billing[billing]@[10.226.127.70]
  update AD.CA_AUTOTRANS_22_1 set STS = N where ACCT_ID=N

想要转换成
Count  MaxTime                        user                                          sql
1  MaxTime=60.15s (Total 60s)   billing[billing]@[10.226.127.70]   select name, current_value, increment from zd.sequence where name='S'  
4  MaxTime=60.13s (Total 60s)   billing[billing]@[10.226.127.70]   update zd.sequence set current_value = current_value+increment  
10  MaxTime=60.12s (Total 601s)   billing[billing]@[10.226.127.70]   update AD.CA_QUEUE_W_6_22_9_1 set DEAL_STS = N  
6  MaxTime=60.12s (Total 360s)   billing[billing]@[10.226.127.70]   update AD.CA_AUTOTRANS_22_1 set STS = N where ACCT_ID=N

具体的script
[root@oracle6 test]# awk -vRS="Count: " -F"\n" 'BEGIN{OFS="      ";print "Count  MaxTime   user      sql"}NF>0{$1=$1;print $0}' tt2


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24237320/viewspace-2092741/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: [Shell] awk 数组(2)
请登录后发表评论 登录
全部评论

注册时间:2010-07-13

  • 博文量
    406
  • 访问量
    1208676