【问题标题】:Append different values to even and odd lines in a list将不同的值附加到列表中的偶数行和奇数行
【发布时间】:2018-11-18 23:49:11
【问题描述】:

我需要附加以下列表:

urack-L-
urack-L-
urack-L-
urack-L-
urack-L-

用 urack-L-

urack-L-100
urack-L-101
urack-L-100
urack-L-101
urack-L-100  

等等……

除了增量(100,101,102 等...)之外,我还没有找到其他方法。任何简短而甜蜜的 sed 技巧?

【问题讨论】:

  • 这应该作为列粘贴,抱歉。
  • 您必须缩进四个空格才能逐字打印文本(即不删除换行符)。
  • 它是像您的示例那样在 100 和 101 之间交替,还是像您的文本所示从 100 递增?

标签: bash vim sed


【解决方案1】:

如果你有 GNU sed,你可以使用地址扩展:

sed '1~2s/$/100/;2~2s/$/101/' infile

其中地址<em>first</em>~<em>step</em> 与地址first 的行匹配,然后是每个step 行。

或者,正如 ctac 的评论中指出的那样:

sed 's/$/100/;n;s/$/101/' infile

这使用n 命令打印模式空间(包含奇数行)并将下一个(偶数)行加载到其中。这应该适用于任何符合 POSIX 的 sed。

【讨论】:

  • 所有 sed: sed 's/$/100/;n;s/$/101/' infile
【解决方案2】:
 :%s/$/\=(line(".")%2==0?"101":"100")/


 % ................ whole file
 s ................ substitute 
 $ ................ end of line
 \=(line(".") ..... gets the number of the current line
 %2==0? ........... if the rest of division equals zero

参考link

【讨论】:

    【解决方案3】:

    awk:

    awk '{printf "%s%d\n", $0, 101 - NR % 2}' file
    

    NR 变量保存当前记录号,默认为当前行号。 NR % 2 对于偶数或奇数行计算为 0 或 1。

    【讨论】:

    • 虽然此代码可以回答问题,但提供有关 如何为什么 解决问题的附加上下文将提高​​答案的长期价值。
    • @Alexander 你完全错了。请不要在您不理解的帖子上发表评论,使网站变得混乱。谢谢。
    • Ed,这就是 cmets 的用途,也可以问一些难以理解的问题
    • 是的,我知道,但我也知道这个人对问题或您的答案的兴趣为零,并且只发表了他的评论,因为某些自动化工具将您的答案标记为可能低质量,因为它只是代码,并且所以他在不知道它是否真的低质量的情况下给它盖上了橡皮图章。仅代码不等于低质量,该工具只是要求了解该领域的人做出决定,最好留给人们查找手册页以解释他们是否不了解的微小的琐碎脚本'不明白他们。
    【解决方案4】:

    这不适用于sed。只需将 shell 循环与您测试的变量一起使用。

    i=100
    while read line
    do
        echo "$line$i"
        if [[ i == 100 ]]
        then i=101
        else i=100
        fi
    done < inputfile > outputfile
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2020-06-18
    • 2011-07-03
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多