GNU awk的$1=$1到底有什么作用?$0=$0呢?
来源:互联网 发布:淘宝购物车标志 编辑:程序博客网 时间:2024/05/21 17:22
转载:http://www.codeweblog.com/gnu-awk%E7%9A%84-1-1%E5%88%B0%E5%BA%95%E6%9C%89%E4%BB%80%E4%B9%88%E4%BD%9C%E7%94%A8-0-0%E5%91%A2/
GNU awk的$1=$1到底有什么作用?$0=$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
其实,在awk源码中.重新计算$0的值的函数名叫rebuild_record,重构记录的意思.默认情况下.这个函数是不可能执行的.因为$0是直接读入的.$1=$1等修改字段的行为会触发awk执行这个函数
重新计算$1...的值的函数名叫reset_record,重新分割记录到字段的意思.默认情况下.这个函数只在处理完当前行,读入下一行之前执行.中途是不会执行的.$0=$0等修改记录的行为会触发awk执行这个函数
通过在源码中添加一行标记重新编译awk.可以查看awk到底什么时候运行了这两个函数.
rebuild_record
- echo "A B C D" | awk '{print $0;OFS="|";print "OFS=\"|\"";print $0;print "$1=$1";$1=$1;print $0;}'
- -----------reset_record----------- #读入行之前,执行reset_record,把$0拆分开赋值给$1...
- A B C D #$0为读入的值
- OFS="|" #改变OFS
- A B C D #没有触发rebuild_record重构$0,$0仍为读入的值.
- $1=$1 #执行$1=$1,
- ----------rebuild_record------------ #awk不管$1是否真的改变,执行rebuild_record.
- A|B|C|D #$0的值成为各个字段和ORS计算出的值
reset_record
- echo "A|B|C|D" | awk '{print $1,NF;print "FS=\"|\"";FS="|";print $1,NF;print "$0=$0";$0=$0;print $1,NF}'
- -----------reset_record----------- #读入行之前,执行reset_record,把$0拆分开赋值给$1...
- A|B|C|D 1 #$1为刚才计算的值
- FS="|" #改变FS
- A|B|C|D 1 #没有触发reset_record重构$1和NF,仍为第一次计算的值.
- $0=$0 #执行$0=$0
- -----------reset_record----------- #awk不管$0是否真的改变,执行reset_record.
- A 4 #$1和NF的值成为重新计算出的值
- GNU awk的$1=$1到底有什么作用?$0=$0呢?
- GNU awk的$1=$1到底有什么作用?$0=$0呢?
- if (argc == 1) 到底有什么作用?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢
- Deeplearning中1X1卷积核到底有什么作用呢?
- CNN中,1X1卷积核到底有什么作用呢?
- 电脑的bios到底有什么作用
- 1X1卷积核到底有什么作用
- IsPostBack有什么作用呢?
- IsPostBack有什么作用呢?
- 金银花有什么作用呢
- volalite到底有什么作用?
- javascript中的=,==,===到底有什么区别呢
- URLEncode的作用到底是什么呢?什么情况下非要用URLEncode方法呢?
- 如何判断鼠标右键点击事件
- JPA技术初认识
- js-数据类型学习总结
- 最简实例说明wait、notify、notifyAll的使用方法
- Druid连接池以及在springboot下配置
- GNU awk的$1=$1到底有什么作用?$0=$0呢?
- 进阶篇:8)供应商的“陷阱破解”
- JAVA wait(), notify(),sleep详解
- Android 布局文件中使用其他布局文件的方法
- Android异步处理之AsyncTaskLoader简单使用
- Java:String和Date、Timestamp之间的转换
- 后方交会
- 怎么打开Xcode的Archives界面
- [产品经理]技术岗转产品经理