2016-11-11 3 views
0

に同じ単語をsedを使用して追加します:すべてのどのように私はすぐに元のファイルは以下のようになり、一つのファイルの多くの異なる行の末尾

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

を、私はいくつかのテキスト(例えば、「言葉」)を追加したいですXファイルの末尾に到達するまでの行は、次のように:(例ではX = 2)

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

Nは、私が(SED使用して)作成したプログラムで100000 のオーダーである私は待たなければなりませんでした約15分間終了する。私はそれを行うより速い方法があると確信しています。 GNUで

+0

作成したプログラムを投稿できますか? – Tim

答えて

0

はsedを:

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

私は答えの簡潔さに驚いています。 bashとGNU sedを学ぶ良い本をお勧めしますか? ありがとう – Ivan

+0

@アイバン:私は[janos 'suggestion]に同意します(http://stackoverflow.com/questions/40555777/how-do-i-quickly-append-using-sed-the-same-word-to-the -end-of-many-different-lin/40555858#comment68350513_40555869)、[sedタグwiki](http://stackoverflow.com/tags/sed/info)と[The Stack Overflow Regular Expressions FAQを参照してください](http://stackoverflow.com/a/22944075/3776858)も参照してください。 – Cyrus

0

あなたが使用したものsedコマンド言及するのを忘れてしまいました。 (GNUのSED)このメソッドは、すべての2行目の末尾に「言葉」を追加するには簡単で、非常に高速である必要があります:

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

あなたが-iフラグを追加、インプレースのファイルを上書きする場合:

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

それはかなり速い答えでした。 私はサイラスに尋ねるのと同じことを尋ねます。 bashとGNU sedを学ぶ良い本をお勧めしますか? ありがとうございます – Ivan

+0

絶対に、[Bashタグwiki](http://stackoverflow.com/tags/bash/info)の一番下を見てください。これは、すべてのBash学習者にとって私の一番のお勧めです。 – janos

0

sedは、すべての行の単純なサブセットです。

$ 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で動作し、簡単に微調整することができます。他のタスクのためには、簡潔、明瞭さ、移植性、保守性、効率性、およびソフトウェアの他のほとんどの望ましい属性のためのawkを使用する必要がありますあなたが将来的に別のやり方でやりたいことをすること。

s/old/new/以外のことを行うために不可解なsed構造を学習する時間を無駄にしないでください。アーノルド・ロビンズのEffective Awk Programming、第4版を読んで、正しい方法を実行する方法を学びます。

関連する問題