将不同的值附加到列表中的偶数行和奇数行

时间:2018-06-08 21:41:02

标签: bash vim sed

我需要附上以下列表:

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技巧?

4 个答案:

答案 0 :(得分:4)

AWK:

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

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

答案 1 :(得分:2)

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

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

其中地址first~step与地址 first 的行匹配,然后匹配每个 step 行。

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

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

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

答案 2 :(得分:1)

 :%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 :(得分:0)

这不适合sed。只需使用带有您测试的变量的shell循环。

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