Linux:根据匹配从文本文件中提取指定数量的行

时间:2015-07-13 13:06:28

标签: linux bash unix sed copy

我有一个包含多个数据集的文本文件。我编写了一个代码,用于在文本文件中搜索某些值(左上角的4个字母代码)但是,现在我需要能够让脚本在匹配后从一组行中复制数据(&#34) ;找到了PHHI等#34;)。数据值的格式都相同。

数据:

PHHI   GFS MOS GUIDANCE    7/13/2015  0000 UTC                      
DT /JULY 13            /JULY 14                /JULY 15          /  
HR   06 09 12 15 18 21 00 03 06 09 12 15 18 21 00 03 06 09 12 18 00 
X/N                    83          71          84          70    84
TMP  77 76 76 76 76 79 82 81 76 76 74 73 76 80 82 81 76 75 73 76 83 
DPT  72 72 72 72 72 72 70 68 70 70 69 69 69 70 70 69 69 69 69 69 69 
CLD  BK OV BK OV OV BK FW FW CL FW BK FW SC SC FW FW FW CL FW SC FW 
WDR  10 09 06 04 07 09 07 08 07 06 03 03 07 08 07 08 07 07 04 07 08 
WSP  04 03 03 03 06 11 16 11 06 08 05 03 04 09 12 09 05 03 03 03 10 
P06         5    27    16     0     4     2     4    15     5  6  1 
P12              39          21           8          19        7    
Q06         0     1     0     0     0     0     0     0     0  0  0 
Q12               1           1           0           1        0    
CIG   5  4  4  4  4  4  5  8  6  6  6  7  6  6  7  8  7  8  8  8  8 
VIS   7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7 
OBV   N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N

我有兴趣提取位于" X / N"的数据值。线。

1 个答案:

答案 0 :(得分:2)

在匹配后获取指定数量的数据行:

grep pattern -A num file

其中,

pattern是要匹配的模式 num是匹配后要采取的数据行数

例如,要在PHHI之后获得3行:

grep "^PHHI" -A 3 file

输出:

PHHI   GFS MOS GUIDANCE    7/13/2015  0000 UTC                      
DT /JULY 13            /JULY 14                /JULY 15          /  
HR   06 09 12 15 18 21 00 03 06 09 12 15 18 21 00 03 06 09 12 18 00 
X/N                    83          71          84          70    84

仅获取X/N行:

grep "^X/N.*" file

输出:

X/N                    83          71          84          70    84