awk '/关键字/{print s}{s=$0}' file 中{print s}{s=$0}为什么可以输出关键字前一样的内容?该如何理解?

打错,是关键字前一行的内容... 打错,是关键字前一行的内容 展开
 我来答
钟令明
2013-04-28 · 超过11用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:23.9万
展开全部
awk '{/关键字/{print pre;print $0} else {pre=$0}}' a.txt > b.txt
这样可以打印出关键字上一行和关键字当前行
awk '{if(NR % 2 == 0){print $0}}' b.txt 获取到偶数行,就对了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我叫熊拍拍
推荐于2018-04-23 · TA获得超过210个赞
知道小有建树答主
回答量:101
采纳率:0%
帮助的人:96.8万
展开全部
这个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。
这样就实现了打印关键字的前一行的内容。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式