如何使用不同列中的文本编辑器生成线条图案

时间:2017-01-30 18:38:29

标签: vim awk sed

我的文字如下:

a text is present
for a few lines
which I dont want 
to edit 
1 2 ab
2 3 ab
3 4 ab
4 5 ab 
5
6
7
8

现在我想在第二列中生成数字的升序,并使第三列填充字符串“ab”,如下所示。

a text is present
for a few lines
which I dont want 
to edit 
1 2 ab
2 3 ab
3 4 ab
4 5 ab
5 6 ab
6 7 ab
7 8 ab
8 9 ab 

4 个答案:

答案 0 :(得分:2)

这可能是您正在寻找的内容:

$ awk '{$2=($2?$2:p[2]+1); $3=($3?$3:p[3]); split($0,p)} 1' file
1 2 ab
2 3 ab
3 4 ab
4 5 ab
5 6 ab
6 7 ab
7 8 ab
8 9 ab

鉴于你在第100行开始上述转换的新要求:

awk 'NR>99{$2=($2?$2:p[2]+1); $3=($3?$3:p[3]); split($0,p)} 1' file

答案 1 :(得分:1)

awk中的另一个人:

linedata = line.Split(',');

您可以使用lineData = line.Split(separators, StringSplitOptions.None);控制起始记录,也可以控制您想要开始使用的行。

答案 2 :(得分:0)

使用vim:

:g/\d\+\s*$/ %s:\v\d+ (\d+) ab\_s*\d\s*$\zs:\=printf(" %d ab",submatch(1)+1):

答案 3 :(得分:0)

在vim中:

qa
  :%s/\v( \d+.+)(\n\d+)$/\1\2\1/
  w<C-a>
  @a
q
@a

这是一个递归宏,它填充第一行只有一列,上面一行有第二列和第三列,然后递增第二列。