2017-01-06 2 views
1

Можно вставить текст в порядок в пустые строки в txt (файл txt может содержать сотни элементов) использовать bash?Вставить текст в пустые строки в bash

Первый файл

text1 

text2 

text3 

text4 

textn... 

#and etc 

Второй файл

text1b 
text2b 
text3b 
textbn... 
#and etc 

Выход:

text1 
text1b 
text2 
text2b 
text3 
text3b 
text4 
textbn... 
textn... 
#and etc 
+1

Непонятно, что вы просите. Являются ли 'text1b' копией предыдущей строки плюс' b'? Это было бы легко сделать. Также: ** Что вы пробовали? ** – sorontar

+0

Я бы сказал, что это плохой вопрос. 1), где находится 'textnb'? 2), если есть непрерывные пустые строки, что вы хотите сделать? 3) если в BOF есть пустая строка (строки), что вы хотите сделать. Мне не нравится этот вопрос, после получения ответа, измените требование 10 раз, чтобы разбить полученные ответы ... – Kent

ответ

3

С GNU СЭД, и это два файла:

file1:

 
text1 

text2 

text3 

text4 

file2:

 
text1b 
text2b 
text3b 

Эта команда:

sed -e '/^$/{R file2' -e 'd}' file1 

Выход

 
text1 
text1b 
text2 
text2b 
text3 
text3b 
text4 

От man sed:

R filename: Добавить строку, считанную с имени файла. Каждый вызов команды считывает строку из файла. Это расширение GNU.

0

В AWK, например, имеющий счетчик i:

$ awk '/^$/ && ($0= "text" ++i "b") || 1' file 
text1 
text1b 
text2 
text2b 
text3 
text3b 
text4 
text4b 
textn... 
text5b 
#and etc 

или путем копирования предыдущей записи и добавления b:

$ awk '/^$/ { $0=p "b" } p=$0' file 
text1 
text1b 
text2 
text2b 
text3 
text3b 
text4 
text4b 
textn... 
textn...b 
#and etc 
0

Это будет работать энергично, эффективно и переносимо в любом awk в любой системе UNIX:

awk 'FNR==1{a[NR]=$0;next} {print (NF ? $0 : a[FNR])}' file2 file1