我需要附上以下列表:
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技巧?
答案 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