搜索大文件中的每 n 行模式,并为接下来的 x 行范围添加前缀



例如

我有一个带有以下模式的大文件。搜索模式是日期,我必须为接下来的 n 行添加日期前缀。日期模式位于第 n 个重复行,接下来的几行也是一个固定数字。

date 1  
line 1  
line 2  
line 3  
date 2  
line 4  
line 5  
line 6  
date 3  
line 7  
line 8  
line 9  

上面的模式应该转换为如下所示

date 1 line 1  
date 1 line 2  
date 1 line 3  
date 2 line 4  
date 2 line 5  
date 2 line 6  
date 3 line 7  
date 3 line 8  
date 3 line 9  

有没有一个简单的命令使用 sed/awk 可以做到这一点,或者我应该继续编写一个 bash/python 脚本?

with awk:

awk -v pattern="date" '$0~pattern{p=$0;next}{print p,$0}' file

pattern变量更改为与您的文件匹配的任何变量。

这是Python中的一种方式:

with open('file.txt') as f:
for line in f:
if line.startswith('date'):
date = line
continue
print(date, line)

输出

date 1 line 1
date 1 line 2
date 1 line 3
date 2 line 4
date 2 line 5
date 2 line 6
date 3 line 7
date 3 line 8
date 3 line 9

一个简单的python scrip可以做到这一点:

k=nth_rep
line_k=0
with open("the_file.txt") as f:
for line in f:
if (line_k % k == 0):
date_line = str(line)
line = 'n'
else:
line = line + " " + date_line
line_k= line_k + 1

未测试

有awk解决方案:

awk '{if ($1 == "date") a_date = $0} { if ($1 == "line") print a_date $0}'

解体: 如果第一行等于date则存储此行。 如果第一行等于line则打印存储值和此行。

最新更新