【问题标题】:how to add number after each four lines如何在每四行之后添加数字
【发布时间】:2014-03-27 13:25:34
【问题描述】:

我有一个文件,其中包含:

aaaaaaaaaa
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee
ffffffffff
gggggggggg
aaaaaaaaaa
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
.....

我想为每四行添加一个数字,就像这个结果

aaaaaaaaaa
aaaaaaaaaa
bbbbbbbbbb
cccccccccc1
dddddddddd
eeeeeeeeee
ffffffffff
gggggggggg2
aaaaaaaaaa
aaaaaaaaaa
bbbbbbbbbb
cccccccccc3
dddddddddd
....

如何做到这一点, 感谢您的帮助!

【问题讨论】:

    标签: regex linux bash shell awk


    【解决方案1】:

    使用awk

    $ awk '!(NR%4){sub(/$/,++x)}1' file
    aaaaaaaaaa
    aaaaaaaaaa
    bbbbbbbbbb
    cccccccccc1
    dddddddddd
    eeeeeeeeee
    ffffffffff
    gggggggggg2
    aaaaaaaaaa
    aaaaaaaaaa
    bbbbbbbbbb
    cccccccccc3
    dddddddddd
    

    【讨论】:

    • 谢谢。它完成了这项工作
    • 你着火了!好一个:)
    【解决方案2】:

    你可以用这个:

    $ awk 'NR%4==0 {$0=$0""++incr} 1' file
    aaaaaaaaaa
    aaaaaaaaaa
    bbbbbbbbbb
    cccccccccc1
    dddddddddd
    eeeeeeeeee
    ffffffffff
    gggggggggg2
    aaaaaaaaaa
    aaaaaaaaaa
    bbbbbbbbbb
    cccccccccc3
    dddddddddd
    

    说明

    • NR%4==0 {$0=$0""++incr} 如果数字或记录(在这种情况下为行)是 4k,则将 incr 变量附加到行尾。使用++incr,我们在第一次使用时将其设为1
    • 1 执行默认的 awk 行为:{print $0}

    【讨论】:

    • +1 我正要说$0""++incr 中的"" 没有做任何事情,直到我尝试使用具有数值的$0 并发现实际上有必要这样做或$0(++incr)。我想这是因为$0++incr 可以解释为$0 + (+incr)
    • @fedorqui ,它有点错误,它将第一行标记为 1 ,第五行标记为 2 ...但我需要第四行为 1 ,第八行为 2 ...
    • @EdMorton 谢谢!是的,我尝试使用 $0++incr 并没有工作,因此我添加了 "" :)
    • @YOU 是的,我第一次做错了。然后我注意到它在4K 行,而不是我最初发布的4K + 1
    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2016-08-06
    • 2016-05-12
    • 2011-02-21
    相关资源
    最近更新 更多