Combinez 2 lignes dans un fichier texte volumineux en utilisant sed

Comment combiner deux lignes adjacentes spécifiques dans un grand fichier texte en une seule ligne en utilisant sed ? Par exemple, je veux combiner les lignes numérotées 2001891 et 2001892 en une seule ligne et les réécrire dans le fichier à la même ligne (ce qui signifie que la ligne 2001893 et ​​les suivantes seront déplacées vers le haut)?

J’ai cherché des tutoriels et des manuels sur sed mais tous sont trop cryptiques pour moi (ceux qui sont '2,3p;N;s/jam.l,21/.,lk;dczA[12]blahblah' signifie quoi?)

Je ne suis pas un gourou sed , mais je pense que vous voulez:

 sed -i '2001891N;s/\n//' filename 

(Essayez-le sans -i sur un fichier de test avant de l’exécuter sur des données importantes, bien sûr.)

 $ cat a.dat 1 2 3 4 $ sed '2N;s/\n//' a.dat 1 23 4 

J’ai essayé le plus simple sed '2001891s/\n//' , mais il ne fonctionne pas lorsque le motif est \n . Pour tout autre motif ( sed '2001891s/a//' par exemple), cela semble fonctionner. Il est trop tard pour que j’y réfléchisse davantage, mais j’espère que l’un des gourous sed expliquera ce qui se passe avec ma commande sed plus simple.

Je suis sûr que vous pouvez faire de la magie simple en utilisant cat, redirection de fichiers et commande nl.

 $ awk 'NR==2001891{printf $0;getline;print;next}1' file > temp;mv temp file 

OU

 $ awk '{printf (NR==2001891)?$0:$0"\n"}' file > temp;mv temp file