awk '/关键字/{print s}{s=$0}' file 中{print s}{s=$0}为什么可以输出关键字前一样的内容?该如何理解?
2个回答
展开全部
awk '{/关键字/{print pre;print $0} else {pre=$0}}' a.txt > b.txt
这样可以打印出关键字上一行和关键字当前行
awk '{if(NR % 2 == 0){print $0}}' b.txt 获取到偶数行,就对了
这样可以打印出关键字上一行和关键字当前行
awk '{if(NR % 2 == 0){print $0}}' b.txt 获取到偶数行,就对了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个awk脚本里有两个大括号,第一个表示匹配到了关键字后才会执行print s;而第二个没有限定,即每一行都会执行s=$0。举个例子,文件abc总共三行,如下:
a
b
c
执行命令awk'/c/{print s}{s=$0}' abc
输出结果为c 的前一行 b,分析如下:
第一行为a,无法匹配关键字c,所以不执行print s,只执行后面大括号里的内容即将第一行“a” 赋值给变量s;
第二行为c,还是无法匹配到关键字c,不执行print s,只执行s=$0,将第二行“b”赋值给变量s;
第三行为c,可以匹配关键字c,执行命令print s,此时变量s的值为刚刚赋值的“b”,所以输出“b”;之后还会将第三行的全部内容“c”赋值给变量s。
这样就实现了打印关键字的前一行的内容。
a
b
c
执行命令awk'/c/{print s}{s=$0}' abc
输出结果为c 的前一行 b,分析如下:
第一行为a,无法匹配关键字c,所以不执行print s,只执行后面大括号里的内容即将第一行“a” 赋值给变量s;
第二行为c,还是无法匹配到关键字c,不执行print s,只执行s=$0,将第二行“b”赋值给变量s;
第三行为c,可以匹配关键字c,执行命令print s,此时变量s的值为刚刚赋值的“b”,所以输出“b”;之后还会将第三行的全部内容“c”赋值给变量s。
这样就实现了打印关键字的前一行的内容。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询