Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1186 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Linux: remplacer un retour chariot par un espace (AWK)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Linux: remplacer un retour chariot par un espace (AWK)

n°1041861
exover
Posté le 14-05-2008 à 16:50:04  profilanswer
 

Bonsoir,
 
Voila j'ai un fichier composé de cette sorte:
 
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada|0|1|tadada|3|3|1|360|OK||REVERSE|1||32008001|947183522|||||35991501|0
 
Des fois le champs en gras est composé comme ca :
 
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada
    badada|0|1|tadada|3|3|1|360|OK||REVERSE|1||32008001|947183522|||||35991501|0
 
Donc un retour chariot est veu se glissé par la, j'aimerais intégrer dans mon awk la fonction de remplacement du retour chariot par un espace mais UNIQUEMENT sur ce champs (le champs $20 en faites).
 
Je n'y arrive pas, pouvez vous donc m'aidez.
 
Merci a vous


Message édité par exover le 14-05-2008 à 16:51:41

---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
mood
Publicité
Posté le 14-05-2008 à 16:50:04  profilanswer
 

n°1041970
exover
Posté le 15-05-2008 à 06:29:57  profilanswer
 

personne?


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1041974
Hrolf
Posté le 15-05-2008 à 08:25:47  profilanswer
 

Humm avec une regexp c'est pas très dur je pense la find e ligne étant un $ ...
 
Mais faudrait fait un "cat <fichier> |sed -e s/$/ / | awk ..."
 
Ligne probablement à corriger mais qui peu te donner une idée de base :p


---------------
Il y a trois sortes de mensonges : les mensonges, les gros mensonges et les statistiques !
n°1041983
exover
Posté le 15-05-2008 à 09:10:34  profilanswer
 

hmmmmm déja je passe par un tail -f car il faut que cela soit en continu, le sed heu.... je pige pas trop car des fois tu l'as, des fois tu ne l'as pas donc.....
 
Je vais regarder de plus pres mais j'aimerais l'integrer directement dans mon awk.
 
Merci


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1041988
matafan
Posté le 15-05-2008 à 09:32:57  profilanswer
 

awk -F '|' 'NF==20 { printf("%s ", $0); next } {print}'

n°1042036
exover
Posté le 15-05-2008 à 11:07:26  profilanswer
 

matafan > merci mais heu... tu pourrais m'expliquer please, j'avous que la j'ai un peu de mal a comprendre le fonctionnement.


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1042044
exover
Posté le 15-05-2008 à 11:18:41  profilanswer
 

ah c'est bon je crois comprendre, tu lui dis que si le nombre de champ est égale a 20 alors tu cumule les 2 lignes, j'ai tout bon??


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1042077
matafan
Posté le 15-05-2008 à 12:48:12  profilanswer
 

Si la ligne a 20 champs, on l'affiche avec un espace au lieu du retour de ligne final (d'où le printf au lieu de print, car printf, au contraire de print, n'ajoute pas de retour à la ligne). Sinon (c'est un "sinon" à cause du next) on affiche simplement la ligne.

n°1042112
exover
Posté le 15-05-2008 à 14:01:58  profilanswer
 

ok mais désolé cela ne fonctionne pas, le résultat est celui ci:
 
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada 2


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1042128
exover
Posté le 15-05-2008 à 14:19:14  profilanswer
 

bon par contre si je fais cela:
awk -F '|' ' NF<40 { printf("%s ", $0); next } {print NR}'
j'ai en réponse:
 
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada|0|1|tadada|3|3|1|360|OK||REVERSE|1||32008001|947183522|||||35991501|0 2
 
Le 2 representant l'autre ligne, celle ci par contre devrait etre a la ligne et non sur la meme ligne :(


Message édité par exover le 15-05-2008 à 15:07:29

---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
mood
Publicité
Posté le 15-05-2008 à 14:19:14  profilanswer
 

n°1042162
matafan
Posté le 15-05-2008 à 15:25:40  profilanswer
 

Ben écoute chez moi ça marche avec l'exemple que tu as donné, alors soit ton exemple n'est pas bon, soit tu as mal expliqué ce que tu voulais faire, soit j'ai mal compris ce que tu voulais faire, soit t'a fait une connerie.

$ cat txt
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada|0|1|tadada|3|3|1|360|OK||REVERSE|1||32008001|947183522|||||35991501|0
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada
badada|0|1|tadada|3|3|1|360|OK||REVERSE|1||32008001|947183522|||||35991501|0
$ awk -F '|' 'NF==20 { printf("%s ", $0); next } {print}' txt
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada|0|1|tadada|3|3|1|360|OK||REVERSE|1||32008001|947183522|||||35991501|0
D|1000000038570380.12345.20080514000211507|1000000038570380.12345.20080514000211507|1|1000000038570380|12345|blablabla|badada|tictictic|1||tictactouc|V01L16|20080514000202000|20080514000211507|640||||tadada badada|0|1|tadada|3|3|1|360|OK||REVERSE|1||32008001|947183522|||||35991501|0


 
Edit : bon sur la sortie que je donne on voit pas que ça marche parce que le brower coupe sur l'espace entre tadada et badada, mais c'est bien un espace, pas un retour à la ligne.


Message édité par matafan le 15-05-2008 à 15:28:18
n°1042170
exover
Posté le 15-05-2008 à 15:57:44  profilanswer
 

Ben heu... je viens de réessayer et non désolé cela ne fonctionne pas, voici un exemple concret:
 
fichier de base:
 
D|258720649362743.61800.20080515112643168|258720649362743.61800.20080515112643168|1|258720649362743||serv|||2||hub_ri|V01L16| 20080515112641000|20080515112643168|190||||0561080709|0|1|0561080709|1|1|1|50|OK||REVERSE_CHARGED|1||0003|948082733||||||0
D|1000000038557513.32008.20080515112713778|1000000038557513.32008.20080515112713778|1|1000000038557513||serv|||1||hub_r n|V01L16|20080515112727000|20080515112713778|2100||||La gare
Paris 16|0|1|La gare Paris 16|27|27|1|1580|OK||REVERSE_CHARGED|1||001|948083251|||||35703600|0

D|333780802055.20080515112802549|333780802055.32008.20080515112802549|1|333780802055|32008|serv|||3||hub_rn|V01L16|20080 515112802000|20080515112802549|660||||Entreprises 42 cuinzier |0|1|Entreprises 42 cuinzier|8|8|1|330|OK||REVERSE_CHARGED|1||002|948083981||||||0
D|377876107718.20080515111747002|377876107718.20080515111747002|1|377876107718||serv|||3||hub_mt|V01L16|20080515111745000|20080515111747002|1020||||Tailleur
Saint varent 79330|0|1|Tailleur Saint varent 79330|0|0|0|900|OK|MT_ERR_NOREPONSE|REVERSE_CHARGED|1||002|948073640||||||0

D|258720649362743.61800.20080515112643168|258720649362743.20080515112643168|1|258720649362743||serv|||2||hub_ri|V01L16| 20080515112641000|20080515112643168|190||||0561080709|0|1|0561080709|1|1|1|50|OK||REVERSE_CHARGED|1||00003|948082733||||||0
 
En gras les 2 lignes qui ne vont pas
 
Résultat avec ton awk:
1
D|1000000038557513.20080515112713778|1000000038557513.32008.20080515112713778|1|1000000038557513||serv|||1||hub_r n|V01L16|20080515112727000|20080515112713778|2100||||La gare Paris 16|0|1|La gare Paris 16|27|27|1|1580|OK||REVERSE_CHARGED|1||001|948083251|||||35703600|0 4
D|377876107718.20080515111747002|377876107718.20080515111747002|1|377876107718||serv|||3||hub_mt|V01L16|20080515111745000|20080515111747002|1020||||Tailleur Saint varent 79330|0|1|Tailleur Saint varent 79330|0|0|0|900|OK|MT_ERR_NOREPONSE|REVERSE_CHARGED|1||002|948073640||||||0 7
 
j'ai remplacé print par print NR (cela ne change rien avec ou sans).
En gras la nouvelle ligne, alors que celle ci devrait etre a la ligne et non a un espace de sa précédente.
 
Merci en tous cas de ton aide ;)


Message édité par exover le 15-05-2008 à 16:02:36

---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1042207
jc the gre​at
Posté le 15-05-2008 à 17:53:46  profilanswer
 

cat log.txt | nawk -F'|'  '  
BEGIN { flag="ok"; }  
NF<40 { flag="tronque" ; printf("%s ", $0); }  
NF==40 {if (flag=="tronque" ) {print("\n"$0); flag="ok" ;} else print $0;}'
 
edit: petite erreur


Message édité par jc the great le 15-05-2008 à 18:10:05
n°1042208
matafan
Posté le 15-05-2008 à 17:56:07  profilanswer
 

Bon écoute je comprend rien à ce que tu as et à ce que tu veux. Met un exemple de fichier quelque part sur un ftp, et met aussi le fichier que tu voudrais en sortie. Là ça s'affiche mal et tu ne t'exprime pas très clairement, et au final on comprend rien.

n°1042220
exover
Posté le 15-05-2008 à 19:52:15  profilanswer
 

matafan> je réexplique, j'ai un fichier qui est comme cela (je vais prendre plus simple)
 
AA|BB|CC|DD|EE|FF
des fois je me retrouve avec
AA|BB|CC|D
D|EE|FF
 
Moi je veux qu'il n'y ai toujours que : AA|BB|CC|DD|EE|FF
 
Donc mon log est:
AA|BB|CC|DD|EE|FF
AA|BB|CC|D
D|EE|FF
AA|BB|CC|DD|EE|FF
 
Comment obtenir:
AA|BB|CC|DD|EE|FF
AA|BB|CC|DD|EE|FF
AA|BB|CC|DD|EE|FF
 
Avec ton awk j'ai:
AA|BB|CC|DD|EE|FF
AA|BB|CC|DD|EE|FF AA|BB|CC|DD|EE|FF
 
J'espere avoir été plus claire ;)
 
 
jc the great > c'est quoi nawk???? la différence avec awk juste pour ma culture perso la :D
Sinon merci a toi j'essayerais demain :D
 


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1042229
exover
Posté le 15-05-2008 à 20:13:55  profilanswer
 

Je vais etre meme plus claire parceque je crois que je pars dans un truc qui ne vas pas fonctionner au final.
 
je reprend l'exemple du dessus :D
 
Mon fichier est donc comme ceci:
 
AA|BB|CC|DD|EE|FF  
AA|BB|CC|D  
D|EE|FF  
AA|BB|CC|DD|EE|FF
 
Moi je le ressort sous cette forme (genre tableau):
 
ID:       Serv:     Entreprise:       Bureau:
---      -----     ------------     --------
BB         CC        DD                    FF
 
Quand il y a un saut de ligne dans mon fichier cela me ressort:
 
ID:       Serv:     Entreprise:       Bureau:
---      -----     ------------     --------
BB         CC        D                    
 
Donc je pensais d'abord remettre le tout sur une seul ligne, puis retravailler sur cette ligne, mais je crois pas que ce soit l'idéal dans mon cas, je ne fais pas un cat mais un tail -F, le "tableau" étant alimenté en permanence, c'est une vue direct sur le fichier et en continue.
 
Bon si vous ne comprenez pas, ce n'est pas grave, l'aide apporté devrait je pense m'aider bien comme il faut :D
 


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1042277
matafan
Posté le 15-05-2008 à 23:30:21  profilanswer
 

Ecoute exover je comprend pas comment tu te débrouille, mais mon awk fonctionne parfaitement :

$ cat txt
AA|BB|CC|DD|EE|FF
AA|BB|CC|D
D|EE|FF
AA|BB|CC|DD|EE|FF
$ awk -F '|' 'NF==4 { printf("%s ", $0); next } {print}' txt
AA|BB|CC|DD|EE|FF
AA|BB|CC|D D|EE|FF
AA|BB|CC|DD|EE|FF


 
Edit : nawk c'est la version de awk qui se limite à se qui est standard. Sous linux awk est en fait gawk, qui contient des extensions qui ne sont pas dans le awk de base.


Message édité par matafan le 15-05-2008 à 23:34:36
n°1042316
Hrolf
Posté le 16-05-2008 à 08:39:50  profilanswer
 

Le probléme c'est qu'il a pas un fichier si j'ai bien compris mais un flux :D
 
C'est probablement ça qui l'empêche de marcher, et ma solution aussi


---------------
Il y a trois sortes de mensonges : les mensonges, les gros mensonges et les statistiques !
n°1042320
matafan
Posté le 16-05-2008 à 09:28:57  profilanswer
 

Avoir un flux ça ne change rien.
 
En fait je crois que j'ai compris : il doit avoir un fichier au format dos (donc avec 0x0d 0x0a pour les retour chariot), et donc awk merde avec les retours chariot.

n°1042328
exover
Posté le 16-05-2008 à 09:41:55  profilanswer
 

hrolf > ben je l'ai dis au début que c'etaiut un tail -F mais il est vrai que je n'ai pas reellement indiqué ce que je cherchais :D
 
matafan> ben la je pige plus rien, ce matin, je lance le code au dessus et cela fonctionne!!!! moi plus rien capter :D
 


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
n°1042329
exover
Posté le 16-05-2008 à 09:42:37  profilanswer
 

matafan > non non c'est un flux unix ;) mais j'ai fais le test en cat pas en direct sur le flux.


---------------
Spidercochon ! Spidercochon ! Il peut marcher au plafond. Est-ce qu’il peut faire une toile, bien sûr que non c’est un cochon, prends garde Spidercochon est là !
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Linux: remplacer un retour chariot par un espace (AWK)

 

Sujets relatifs
linux pour usage familial : oui ou non?HL2 - Source engine (peut-être) porté sous linux !
[linux] Conky, ventillateurs[linux] Conky, température cpu, ventillateurs
Choix de LinuxRessources Firefox sous Linux
console linux et tache en coursbooter sur windows avec mandriva one 2008 spring installé : comment ??
[Divers][Gnu/Linux] Nice, renice, politesse des processusQuelle imprimante la moins chère pour Linux ?
Plus de sujets relatifs à : Linux: remplacer un retour chariot par un espace (AWK)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR