如何修改awk过滤命令输出文件匹配行的最后N行
解决方案
你有两种常用实现方式,按需选择即可:
方案1:管道拼接tail命令(最推荐)
不需要修改原awk逻辑,直接在末尾拼接tail取最后n行即可,写法简单易维护:
awk '/KEYWORD/{print $0}' FILENAME | tail -n N
把命令里的N替换为你需要保留的行数即可,比如要取最后5行就写tail -n 5。
方案2:纯awk实现(无需额外进程)
如果环境限制不能用管道,可以直接修改awk逻辑,用环形缓存存储匹配行,最后只输出最后n条:
awk -v target_n=N '/KEYWORD/{ matched[++count] = $0 if(count > target_n) delete matched[count - target_n] } END{ for(i = count - target_n + 1; i <= count; i++){ if(i > 0) print matched[i] } }' FILENAME
把命令里的target_n=N的N替换为你需要的行数即可,这种方案不需要额外启动tail进程,处理超大文件时内存占用也稳定,不会把所有匹配行全部加载到内存里。
内容的提问来源于stack exchange,提问作者Carlos
相关产品推荐
相关产品推荐

