如何使用相同的单词快速追加到一个文件的许多不同行的末尾

时间:2016-11-11 20:35:02

标签: bash sed

原始文件是:

line 1
line 2
line 3
line 4
line 5
.
.
.
line N

我想在每个X行附加一些文本(例如" word"),直到到达文件的末尾,如下所示:(示例中X = 2)

line 1 word
line 2
line 3 word
line 4
line 5 word
line 6
line 7 word
.
.
.
line N

N的数量级为100000。 通过我制作的程序(使用sed),我不得不等待大约15分钟才能完成。我确信有更快的方法可以做到。

3 个答案:

答案 0 :(得分:0)

使用GNU sed:

sed '1~2s/.*/& word/' file

答案 1 :(得分:0)

您忘了提及您使用的sed命令。这个方法(GNU sed)附加" word"在每一行的末尾很简单,应该非常快:

sed -e '1~2s/$/ word/' file

如果要就地覆盖文件,请添加-i标志:

sed -ie '1~2s/$/ word/' file

答案 2 :(得分:0)

sed用于单独行的简单替换。对于任何其他任务,您应该使用awk来实现简单性,清晰度,可移植性,可维护性,效率以及软件的大多数其他理想属性:

$ seq 10 | awk -v n=2 '{print $0 (NR%n == 1 ? " word" : "")}'
1 word
2
3 word
4
5 word
6
7 word
8
9 word
10

$ seq 10 | awk -v n=3 '{print $0 (NR%n == 1 ? " word" : "")}'
1 word
2
3
4 word
5
6
7 word
8
9
10 word

以上内容适用于任何UNIX机器上的任何awk,并且可以轻松调整以执行您希望在将来另外或不同地执行的任何操作。

不要浪费你的时间学习神秘的sed结构来做除s/old/new/以外的任何事情 - 通过阅读Effective Awk Programming,4th Edition,by,学习如何做任何想要做的事情。阿诺德罗宾斯。