SED ou awk ou nawk

rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   -  
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Besoin d'un expert sed ou awk pour mettre tout sur la même ligne

CONDITION IN

PBIEXXD000 P_BIL_EDI START BIL EDI

CONDITION OUT

PBIEXXD030 P_BIL_EDI FINS8060 2626 PBIEXXD030
PEDIXXD021 P_BIL_EDI Transfert EDI FINB8050 BRDL to ECFRANCE PEDIXXD021

D'avance un grand merci.


Cdt.

31 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

Y compris les lignes vides ?
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
En supprimant les lignes vides.
Mais je demande plus maintenant.
J'aimerai afficher le résultat ci-dessous

--- PBIBXXD025 ---

CONDITION IN

START DAILY PBIBXXD000
PBILXXD010

CONDITION OUT
PBIBXXD030

En forme de colonne. Colonne 1 NOM : PBIBXXD025
2 CONDITION IN
3 CONDITION OUT

Est-ce possible ? J'ai un fichier contenant 10000 lignes auquels j'aimerai appliquer cette règle.

Un grand merci d'avance.

Cdt.Rahon
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Re-

Est-ce que toutes les lignes devant faire l'objet d'un traitement commencent toujours par les mêmes motifs ? A savoir le nom par "---", les 2 autres champs par "CONDITION" ?

Quel doit être le séparateur de champs ?
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Oui toujours dans ce format là. Mais il faut ajouter à chaque fin de ligne une barre dièsé.

########################################

Ce dernier peut servir de séparateur ?

Cdt, rahon
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
On peut voir un exemple concret de ce que tu veux réellement en sortie à partir de ton exemple ?

En entrée tu as ça :
-- PBIBXXD025 ---

CONDITION IN

START DAILY PBIBXXD000
PBILXXD010

CONDITION OUT
PBIBXXD030

-- PBIBXXD026 ---

CONDITION IN

START DAILY PBIBXXD000
PBILXXD010

CONDITION OUT
PBIBXXD030

Et en sortie tu veux quoi exactement ???
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Voici ce que je veux

-- PBIBXXD025 --- CONDITION IN CONDITION OUT

START DAILY PBIBXXD000 PBIBXXD030

PBILXXD010
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Zut je veux 3 colonnes.

JOB COND IN COND OUT
- XXXXX - avec les cond in avec les cond out
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Un truc comme ça ?
--- PBIBXXD025 --- CONDITION IN START DAILY ... CONDITION OUT PBIBXXD030
--- PBIBXXD026 --- CONDITION IN START DAILY ... CONDITION OUT PBIBXXD031

Et ces colonnes elles seront séparées par quoi ?
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Oui comme cela. Elles seront séparées par des tabulations....

Cdt, Rahon
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
$ sed ':z;N;$!bz;s/\n/ /g;s/CON/\t&/g;s/ \(--- [A-Z]\)/\n\1/g;s/\s\+;/\t/g' plop
--- PBIBXXD025 ---      CONDITION IN  START DAILY PBIBXXD000 PBILXXD010         CONDITION OUT PBIBXXD030
--- PBIBXXD026 ---      CONDITION IN  START DAILY PBIBXXD001 PBILXXD010         CONDITION OUT PBIBXXD031
--- PBIBXXD027 ---      CONDITION IN  START DAILY PBIBXXD002 PBILXXD010         CONDITION OUT PBIBXXD032

$
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Ouaouuuuuu un sacré SED, je test et te dis ca....

plop c'est le fichier ????

Cdt, Rahon
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
A mon avis je dois mal appliqué la commande.

sed ':z;N;$!bz;s/\n/ /g;s/CON/\t&/g;s/ \(--- [A-Z]\)/\n\1/s/\s\+;/\t/g' ALL_COND_IN_OUT.lst (fichier regroupant toutes les données).
<
sed: The label :z;N;$!bz;s/\n/ /g;s/CON/\t&/g;s/ \(--- [A-Z]\)/\n\1/g;s/\s\+;/\t/g is greater than eight characters.
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Pour etre plus clair voila comment sont les données dans le fichiers .

--- P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 ---

CONDITION IN

P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020

CONDITION OUT

P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999

########################################################################

--- P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 ---

CONDITION IN

P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000

CONDITION OUT

P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040

########################################################################

--- P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 ---

CONDITION IN

P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010

CONDITION OUT

P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025

########################################################################
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Quel système ?
Quelle version de sed ?
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
System Unix
Comment connaitre la version du sed ??
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
System Unix
Oui mais encore ? AIX? Solaris ? HP-UX ? SCO ? etc


Comment connaitre la version du sed ??
Ça dépend du système ;-(
Essaye "sed --version"
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
AIX ecux0999 3 5 00C8324C4C00

par contre le sed -version ou sed --version ne fonctionne pas.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Bon c'est pas grave.

Crées un fichier avec ce contenu :

$ cat rahon.sed
:z
N
$ !b z
s/\n/ /g
s/CON/\t&/g
s/ \(--- [A-Z]\)/\n\1/g
s/\s\+;/\t/g
s/##*/\n&/g


Et appelles-le comme suit :
$ sed -f rahon.sed fichier

0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Je teste et te fais un retour.
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
C pas mal, mais ca me donne ca

sed -f rahon.sed ALL_COND_IN_OUT.lst >> TOTO.txt

cat TOTO.txt

--- P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 --- tCONDITION IN P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 tCONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 n########
################################################################ n--- P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 --- tCONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 tCO
NDITION OUT P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 n######################################################################## n--- P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 --- t
CONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 tCONDITION OUT P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 n#################################################################
####### n--- P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 --- tCONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 tCONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999
n######################################################################## n--- P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 --- tCONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD0
00 tCONDITION OUT P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 n######################################################################## n
--- P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 --- tCONDITION IN P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 tCONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 n########
################################################################ n--- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 --- tCONDITION IN P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 P_BIL
_CFF_FOREIGN FINB0206 503 PBIFXXD026 P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 tCONDITION OUT n######################################################################## n--- P_BIL_
CFF_FOREIGN START CFF FOREIGN PBIFXXD000 --- tCONDITION IN tCONDITION OUT P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 n#################
#######################################################

Ca me donne pas cela en forme de colonne.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Essaie de modifier ce qui est en gras :

:z
N
$ !b z
s/\x0a/ /g
s/CON/\x09&/g
s/ \(--- [A-Z]\)/\x0a\1/g
s/\s\+;/\x09/g
s/##*/\x0a&/g
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Je reprendrais ce soir, en tout cas un grand merci à toi.
Je te dirais si cela a fonctionne encore merci pour ton aide.

Cdt, Rahon
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonjour,

avec 3 jours de recul :), un peu de repos ca fais du bien.
J'ai donc tester ce que tu m'as dis mais je ne vois pas ou tu veux aller....

Quand j'execute ce que tu m'as donné sans rien modifier ca donne ca

x0a########################################################################

--- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ---

x09CONDITION IN

P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025
P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026
P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040

x09CONDITION OUT


x0a########################################################################

Puis j'ai essayé de modifier les champs

$ cat gras*
:z
N
$ !b z
s/\x0a/ /g
s/CON/\IN/g
s/ \(--- [A-Z]\)/\x0a\1/g
s/\s\+;/\OUT/g
s/##*/ /g


Ca donne ca...

--- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ---

INDITION IN

P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025
P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026
P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040

INDITION OUT

Je pense que je ne fais pas ce que tu aimerais que je teste...

Cdt, Rahon
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Bon chez moi les 2 solutions marchent très bien et ne pouvant faire de tests sur un système AIX et sa version de "sed", je ne sais plus quoi te dire ;-(

Essaye avec ça (à mettre dans un fichier comme précédemment) :

#n
:debut
/^---/ {
    h
    :boucle
    n
    /^---/ !{
        H
        $ {
            b change
        }
        b boucle
    }
    :change
    x
    s/\n\n*\(CON\)/;\1/g
    s/\n\n*/ /g
    s/##*/\n&/g	
    p
}
x
b debut
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
Oups,

$ sed -f new.sed ALL_COND_IN_OUT.lst
sed: Function s/##*/\n&/g cannot be parsed.
$ cat new.sed
#n
:debut
/^---/ {
h
:boucle
n
/^---/ !{
H
$ {
b change
}
b boucle
}
:change
x
s/\n\n*\(CON\)/;\1/g
s/\n\n*/ /g
s/##*/\n&/g
p
}
x
b debut
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Protège les "#" :
s/\#\#*/\n&/g 
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
sed -f new.sed ALL_COND_IN_OUT.lst
sed: Function s/\#/\#*/\n&/g cannot be parsed.
$

sed -f new.sed ALL_COND_IN_OUT.lst
sed: Function s/\#\#*/\n&/g cannot be parsed.
$

Si près du but :)

Cdt
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Supprime cette ligne on verra plus tard...
0
rahon93 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   2
 
OUAOUUUUUUU

sed -f new.sed ALL_COND_IN_OUT.lst
--- P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 ;CONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ########################################################################
--- P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 ---;CONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 ;CONDITION OUT P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 ########################################################################
--- P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ;CONDITION OUT P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 ########################################################################
--- P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ;CONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ########################################################################
--- P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ---;CONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 ;CONDITION OUT P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 ########################################################################
--- P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 ;CONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ########################################################################
--- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ---;CONDITION IN P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 ;CONDITION OUT ########################################################################
--- P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 ---;CONDITION IN;CONDITION OUT P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ########################################################################

C vraiment pas mal du tout....
0