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

Bash 将不同的值附加到列表中的偶数行和奇数行,bash,vim,sed,Bash,Vim,Sed,我需要附加以下列表: urack-L- urack-L- urack-L- urack-L- urack-L- 用乌拉克-L- urack-L-100 urack-L-101 urack-L-100 urack-L-101 urack-L-100 等等 除了增量(100101102等)之外,我还找不到其他方法。有什么简短的sed技巧吗?这不适用于sed。只需将shell循环与测试的变量一起使用 i=100 while read line do echo "$line$i"

我需要附加以下列表:

urack-L-
urack-L-
urack-L-
urack-L-
urack-L-
用乌拉克-L-

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


除了增量(100101102等)之外,我还找不到其他方法。有什么简短的sed技巧吗?

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

i=100
while read line
do
    echo "$line$i"
    if [[ i == 100 ]]
    then i=101
    else i=100
    fi
done < inputfile > outputfile
i=100
读行时
做
回显“$line$i”
如果[[i==100]]
那么i=101
否则i=100
fi
完成outputfile

如果您使用了GNU,您可以使用扩展来访问以下地址:

sed '1~2s/$/100/;2~2s/$/101/' infile
其中地址
first~step
与地址
first
匹配,然后与每个
步骤
第th行匹配

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

sed 's/$/100/;n;s/$/101/' infile
这将使用
n
命令打印图案空间(包含奇数行)并将下一行(偶数行)加载到其中。这应适用于任何符合POSIX标准的sed。

awk:

awk '{printf "%s%d\n", $0, 101 - NR % 2}' file
NR
变量保存当前记录编号,默认情况下为当前行号<代码>编号%2对于偶数或奇数行计算为0或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

参考。

这应该粘贴为一列,对不起。您必须用四个空格缩进文本才能逐字打印(即,没有删除换行符)。它是像您的示例一样在100和101之间交替,还是像您的文本指示的那样从100递增?相关帖子:更短:
i=$((i==100?101:100))
i=10$(++i%2))但在任何情况下,请参阅以了解其中的一些问题,并使用适合此作业的工具awk(请参阅)。虽然此代码可以回答问题,提供关于如何以及为什么解决问题的附加上下文将提高答案的长期价值。@Alexander你完全错了。请不要把你不理解的帖子的评论弄得乱七八糟。谢谢,Ed,这就是评论的目的,问一些难以理解的问题是的,我知道,但我也知道这个人对这个问题或你的答案没有兴趣,只是发表了他的评论,因为一些自动工具将你的答案标记为可能的低质量,因为它只是代码,所以他用橡皮图章盖住它,不知道它的质量是否真的很低。仅代码并不等于低质量,该工具只是让了解该领域的人做出决定,如果人们不理解,最好留下一些微不足道的脚本,让他们查看手册页进行解释;Ns/$/101/'填充