Соединение двух последовательных строк с использованием awk или sed - PullRequest
17 голосов
/ 07 июля 2010

Как бы я объединил две строки, используя awk или sed?

for e.g.:

У меня есть данные, которые выглядят так:

abcd
joinabcd
efgh
joinefgh
ijkl
joinijkl

Мне нужен вывод, подобный приведенному ниже:

joinabcdabcd
joinefghefgh
joinijklijkl

Ответы [ 6 ]

42 голосов
/ 07 июля 2010
awk '!(NR%2){print$0p}{p=$0}' infile
5 голосов
/ 07 июля 2010
awk 'BEGIN{i=1}{line[i++]=$0}END{j=1; while (j<i) {print line[j+1] line[j]; j+=2}}' yourfile

Нет необходимости в седе.

3 голосов
/ 15 сентября 2015

Говорят, подражание - самая искренняя форма лести.
Вот решение Perl, вдохновленное кодом awk Димитра:

perl -lne 'print "$_$p" if $. % 2 == 0; $p = $_' infile

$_ текущая строка
$. это номер строки

2 голосов
/ 07 июля 2010

Вот оно в седе:

sed 'h;s/.*//;N;G;s/\n//g' < filename
1 голос
/ 30 января 2018

Вы можете использовать printf с троичным:

    awk '{printf (NR%2==0) ? $0 "\n" : $0}'
0 голосов
/ 10 июня 2014

Некоторое улучшение скрипта "sed", приведенное выше, потребует следующего: 1008
-2734406,132904 2846
-2734414,838455 4636
-2734413,594009 6456
-2734417,316269 8276
-2734414,779617

  and make it :    

1008 -2734406.132904
2846 -2734414.838455
4636 -2734413,594009
6456 -2734417,316269
8276 -2734414,779617

  the "sed" is : "sed 'h;s/.*//;G;N;s/\n/ /g'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...