要求是这样的:
输入文件:
.......
.......
foo ......
.......
.......
foo ......
.......
.......
foo ......
.......
.......
输出文件:
.......
.......
foo bar
.......
.......
foo nobar
.......
.......
foo barno
.......
.......
我已经考虑了逻辑并找到了实现上述内容的部分。逻辑就是这样。
lineno=0
lineno
到文件结尾的匹配模式。找到样式后,获取行号lineno=<matched line number> + 1
,仅用第一个值替换一次。我只发现了如何获取匹配模式的行号,如何只替换一次。但是对于第一部分“从文件的特定行号开始匹配”,我什么也没得到。
在Linux中可以满足上述要求吗?
提及逻辑是可取的,因为它可以循环处理。也欢迎其他想法/改进。
答案 0 :(得分:0)
这是一个示例awk脚本,可以一次完成该任务。
输入文件input.txt
:
line 1
foo line 2
foo line 3
line 4
foo line 5
foo line 6
line 7
line 8
foo line 9
foo line 10
line 11
foo line 12
awk脚本script.awk
:
/^foo / { # for each input line starting with foo
fooCount++; # increment foo coutner
if (fooCount%3 == 1) $1 = $1" bar"; # First match. Add bar to 1st field
if (fooCount%3 == 2) $1 = $1" nobar"; # Second match. Add nobar to 1stfield
if (fooCount%3 == 0) $1 = $1" barno"; # Third match. Add barno to 1st field
}
1 # print current line
运行命令:
awk -f script.awk input.txt
输出:
line 1
foo bar line 2
foo nobar line 3
line 4
foo barno line 5
foo bar line 6
line 7
line 8
foo nobar line 9
foo barno line 10
line 11
foo bar line 12
请发表评论