J’ai un fichier comme celui-ci:
123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl 012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d 345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld
Je veux avoir ce résultat, en commençant chaque ligne avec ceux qui commencent par 15 chiffres, et en remplaçant les fins de ligne intermédiaires par un espace:
123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl 012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d 345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld
C’est possible?
J’aime mieux ma solution: pas de twigs et pas de sed,
awk '/^[0-9]{15}/ && NR > 1 {sep="\n"} \ {printf "%s%s", sep, $0; sep = " "} END {print ""}' dat 123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl 012345678901234dkfskadflkdflkasdf ASLÃsa sLL SLD SdsDA SLDALDK LÃD SDFSADF d 345678901234560 DÃLSAD SDLÃSlkfl fg fg kfglkfgklfd gf lfdld
Tu peux faire:
$ awk '/^[[:digit:]]{15}/{if (buf) {print buf} buf=$0; next} {buf=buf FS $0} END {print buf}' file 123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl 012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d 345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld
peut être simplifié avec l’aide de sed
$ sed -r 's/[0-9]{15}/\n&/' file | awk -v RS= -v ORS='\n' '$1=$1' 123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl 012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d 345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld
Cela pourrait fonctionner pour vous (GNU sed):
sed -r ':a;N;/\n[0-9]{15}/!s/\n/ /;ta;P;D' file
Remplacez une nouvelle ligne par un espace sauf si cette nouvelle ligne précède un nombre de 15 caractères.