You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用grep匹配指定文本并输出该行及后续三行的指定列?

解决方案

需求回顾

现有文本:

test to print 
1     aa    ee    0.000     0.000     0.000
2     bb    ff    0.000     0.000     0.000
3     cc    gg        0         0         0

需通过匹配指定单词(如test to print),提取目标行及后续3行的对应列,输出以下两种格式之一:

格式1(带数字表头)

1   2  3
test to print  ee ff gg

格式2(仅核心行)

test to print  ee ff gg

实现命令

方式1:grep + awk组合(易读性高)

输出格式2
grep -A3 "test to print" 你的文件名.txt | awk 'NR==1{save=$0} NR>1{cols=cols" "$3} END{printf "%s  %s\n", save, cols}'
  • grep -A3 "test to print":匹配目标行并输出后续3行
  • awk逻辑:保存第一行内容,拼接后续3行的第3列,最后格式化拼接输出
输出格式1
grep -A3 "test to print" 你的文件名.txt | awk 'NR==1{save=$0} NR>1{nums=nums" "$1; cols=cols" "$3} END{printf "%18s\n%s  %s\n", nums, save, cols}'
  • 新增nums变量拼接后续3行的第1列(数字1/2/3),通过%18s让数字行右对齐,和下方文本匹配

方式2:纯awk实现(精简高效)

输出格式2
awk '/test to print/{line=$0; getline; c=$3; getline; c=c" "$3; getline; c=c" "$3; printf "%s  %s\n", line, c}' 你的文件名.txt
  • 直接匹配目标行,通过getline读取后续3行,依次提取第3列拼接后输出
输出格式1
awk '/test to print/{line=$0; getline; n=$1; c=$3; getline; n=n" "$1; c=c" "$3; getline; n=n" "$1; c=c" "$3; printf "%18s\n%s  %s\n", n, line, c}' 你的文件名.txt
  • 同时提取后续3行的第1列(数字)和第3列,分别拼接后格式化输出

内容的提问来源于stack exchange,提问作者Trung Vô

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:06:18