2014-11-06 6 views
1

У меня есть текстовый файл, как этотRegex для клубных последовательных линий?

name1 
age1 
name2 
age2 
name3 
age3 
name4 
age4 

Я хочу данные в этом формате

name1:age1 
name2:age2 
name3:age3 
name4:age4 

Может кто-нибудь предложить мне какие-либо регулярное выражение, чтобы достичь таких результатов? Я использую регулярное выражение eclipse, которое работает так же, как notepad ++ или edit + regular expression. Также это можно сделать с помощью sed в bash в linux?

+1

найти то, что: '(\ W +) \ п (\ W +) '. Замените «$ 1: $ 2». –

+0

Возможный дубликат [Как подключить пары последовательных строк в большом файле (1 миллион строк) с помощью vim, sed или другого подобного инструмента?] (Http://stackoverflow.com/questions/8545538/how-do- i-join-pairs-of-rows-line-in-a-large-file-1-million-lines-using) – Jotne

ответ

2

через СЭД,

$ sed 'N;s/\n/:/' file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 

N добавляет следующую строку в шаблон пространства буфера.

Через пасте

$ paste -d':' - - < file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 
+0

простой и эффективный, может быть, последний 'g' не должен быть идеальным – NeronLeVelu

0

Поскольку СЕПГ решение уже при условии, что является лучшим, analternative с AWK:

>awk 'NR%2==0{print x":"$0}{x=$0}' your_file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 
> 
0

Вот awk

awk '{printf "%s%s",$1,(NR%2==0?RS:":")}' file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 

Это может быть написано так, но может не работать на всей системе:

awk '{printf $1(NR%2==0?RS:":")}' file 

Вот короче awk

awk 'ORS=NR%2?":":RS' file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 

Это очень гибкая. Если вы хотите присоединиться к каждой 3rd линии, просто изменить к NR%3 ...


Вот еще past (один из кратчайшего решения здесь)

paste -sd":\n" file 
name1:age1 
name2:age2 
name3:age3 
name4:age4 
Смежные вопросы