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
awk '!(NR%2){print$0p}{p=$0}' infile
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.
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
La voici en sed:
sed 'h;s/.*//;N;G;s/\n//g' < filename
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'"
Vous pouvez utiliser printf avec un ternaire:
awk '{printf (NR%2==0) ? $0 "\n" : $0}'