$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/
,如需转载,请注明出处,否则将追究法律责任。