在模式中添加字符

时间:2014-05-16 23:22:50

标签: bash awk

我有一个像这样的文本文件。

Line1
Line2
Line3
Line4
Line5 etc. 

我想添加两个字符' a'和' b'在每一行的末尾交替。输出应该如下:

Line1/a
Line2/b 
Line3/a 
Line4/b ..

我的想法是

if (Linenumber %2 == 0) {
  add a;
}
else 
{
  add b
}

我正在尝试使用awkbash来实现此功能。欢迎任何其他建议。

4 个答案:

答案 0 :(得分:2)

awk '{ printf "%s/%s\n", $0, ((NR % 2) == 1) ? "a" : "b" }' text.file

甚至:

awk 'BEGIN { s[1] = "a"; s[0] = "b" }
           { printf $0 "/" a[NR % 2]}' text.file

答案 1 :(得分:1)

awk 'NR % 2 == 0 {print $0"/a"} NR % 2 == 1 {print $0"/b"}' afile

答案 2 :(得分:1)

$ awk '{print $0"/"(NR%2?"a":"b")}' file
Line1/a
Line2/b
Line3/a
Line4/b
Line5/a

答案 3 :(得分:0)

一个有趣的纯Bash可能性:

mapfile -t ary < file
((n=${#ary[@]}))
printf '%s/a\n%s/b\n' "${ary[@]::(n/2)*2}"
((n%2)) && printf '%s/a\n' "${ary[@]: -1}"

这会将整个文件淹没在内存中,然后使用printf打印内容,同时在每行末尾附加/a/b。奇数行的情况得到妥善处理。