web-dev-qa-db-fra.com

Joindre deux lignes consécutives en utilisant awk ou sed

Comment pourrais-je joindre deux lignes en utilisant awk ou sed?

for e.g.:

J'ai des données qui ressemblent à ceci:

abcd
joinabcd
efgh
joinefgh
ijkl
joinijkl

J'ai besoin d'une sortie comme celle ci-dessous:

joinabcdabcd
joinefghefgh
joinijklijkl
17
Vijay
awk '!(NR%2){print$0p}{p=$0}' infile
40
Dimitre Radoulov
awk 'BEGIN{i=1}{line[i++]=$0}END{j=1; while (j<i) {print line[j+1] line[j]; j+=2}}' yourfile

Pas besoin de sed.

5
bashflyng

Ils disent que l'imitation est la forme la plus sincère de la flatterie.
Voici une solution Perl inspirée du code awk de Dimitre:

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

$_ est la ligne en cours
$. est le numéro de la ligne

3
Chris Koknat

La voici en sed:

sed 'h;s/.*//;N;G;s/\n//g' < filename
2
Beta

Quelques améliorations au script "sed" ci-dessus qui prendront les éléments suivants: 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'"
0
user1655920

Vous pouvez utiliser printf avec un ternaire:

    awk '{printf (NR%2==0) ? $0 "\n" : $0}'
0
Bryon Nicoson