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

问题描述 投票:0回答:5

我需要附加以下列表:

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

bash vim sed
5个回答
4
投票

awk:

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

NR
变量保存当前记录号,默认情况下为当前行号。对于偶数或奇数行,
NR % 2
计算结果为 0 或 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。


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

参考链接


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

0
投票

正则表达式也可以正常工作:

:%s/\(^.*\)\n\(.*\)/\1100\r\2101/g
© www.soinside.com 2019 - 2024. All rights reserved.