分类: LINUX
2014-09-15 16:43:08
原文地址:awk之用2对NR取余实现隔行判断 作者:zooyo
内容: NR NR%2
111 1 1
abc 2 0
222 3 1
ddd 4 0
111 5 1
ddd 6 0
111 7 1
fff 8 0
222 9 1
ccc 10 0
结果:
111:
abc
ddd
fff
---
222:
ddd
ccc
---
不难看出文中的111和222类似标签,它们下面的内容才是需要的文本,而且范本很有规律的标签下面是内容,找到这个顺序和特点后我们看看这个命令:
[解析]
以NR对2取余数,结果为1的为真执行?后面的action,结果为0的为假执行:后面的action。命令里没有pattern,所有{}里的命令全部执行。awk的执行方式就是逐行匹配执行命令的。
第一行:条件为真,x=111
第二行:条件为假,a[111]="\n"abc
第三行:条件为真,x=222
第四行:条件为假,a[222]="\n"ddd
第五行:条件为真,x=111
第六行:条件为假,a[111]="\n"abc"\n"ddd
第七行:条件为真,x=111
第八行:条件为假,a[111]="\n"abc"\n"ddd"\n"fff
第九行:条件为真,x=222
第十行:条件为假,a[222]="\n"ddd"\n"ccc
END最后执行for循环,数组a里就只有111和222两个元素,当i=111时输出111:"\n"abc"\n"ddd"\n"fff"\n---",i=222时同理。最后得到了想要的结果。