例如
我有一个带有以下模式的大文件。搜索模式是日期,我必须为接下来的 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
则打印存储值和此行。