2013-01-11 46 views
1

我有一個文本文件(製表符分隔),我需要的行添加一個新的標題行3添加重複的內容/ sed的

[Tab] ABC123 ABC124 
[Tab] High  High 
ENSG 8.9  7.2 

新的生產線我要是將3行,然後我會想打印歐洲5次,他們每個人之間的選項卡,然後亞洲6倍,標籤他們每個人之間......

[Tab] ABC123 ABC124 
[Tab] High  High  
[Tab] European European [this will be the new line] 
ENSG 8.9  7.2 

我使用的思考sed以便我可以使用

sed'4 i'

但我真的不知道如何將新內容打印/附加到新行中我猜我需要啓動/ European/\ t/a或類似行爲。

基本上掙扎,可能是因爲我沒有聰明地使用Google!

+0

你想*插入*新線,或*替換*現有線? – Beta

+0

插入一個新行。 –

+0

考慮編輯您的問題以顯示確切的輸入和輸出您需要的,而不是口頭描述。口頭描述會造成歧義;-)。祝你好運。 – shellter

回答

3

使用sed '3i\ \tEuropean\tEuropean' file

$ cat file 
     ABC123   ABC124 
     High   High 
ENSG 8.9    7.2 

$ sed '3i\ \tEuropean\tEuropean' file 
     ABC123   ABC124 
     High   High 
     European  European 
ENSG 8.9    7.2 

編輯:

我可能做這樣的事情awk 'NR==3{for(i=0;i<10;i++)s=s"\tEuropean";print s}1'

$ awk 'NR==3{for(i=0;i<10;i++)s=s"\tEuropean";print s}1' file 
     ABC123   ABC124 
     High   High 
     European  European  European European European European European European European European 
ENSG 8.9    7.2 
+0

謝謝!我可以讓它更加靈活嗎?例如,我可以在不需要每次輸入的情況下打印歐洲10次嗎? –

+0

不知道在'sed'中,但在'awk'中你可以看到編輯。 –

+0

如果我想輸入歐洲10次然後輸入亞洲5次 - awk'NR == 3 {for(i = 0; i <10; i ++)s = s「\ tEuropean」; print s; for(i = 0; i <5; i ++)s = s「\ tAsian」; print s} 1'file? –

2

有幾種方法可以做到這一點。一種方法是:

t="$(printf \\t)" # Assign t to be a string with one tab 
sed -e '4i\ 
European${t}European... 
' input-file > output-file 

有了一些炮彈,你可以做這樣的事情t=$"\t",並與一些sed你不需要i後字面換行符,但上方是相當便攜。你總是可以使用文字tab(你可能需要在交互式提示符下鍵入ctrl-v tab)。

0

這可能會爲你工作(GNU):

sed -r '2!b;G;:a;/(\tEuropean){10}/!s/$/\tEuropean/;ta' file 

哪裏10可以是任何數字重複場\tEuropean

+0

嗯,看起來像我沒有GNU sed:s /:沒有找到事件 –