Bonjour,
j'ai le script suivant qui me sert à partir d'un fichier source, à concaténer les lignes qui sont découpées par erreur.
Exemple en entrée :
Je dois avoir en sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 EMP1,S1,123, H1W,BOX1 EMP2,S2,456,3R9,BOX2 EMP4,S4,789 ,H9F,BOX3
Notez au passage qu'une ligne peut être tronquée avant ou après la virgule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 EMP1,S1,123,,H1W,BOX1 EMP2,S2,456,3R9,BOX2 EMP4,S4,789,,H9F,BOX3
Le script que j'ai développé fonctionne bien mais j'aimerais l'améliorer (réduire le nombre d'étapes). Voici ce que j'ai fait :
J'ai tenté de jouer avec awk (next, ...) mais sans succès. Merci d'avance si vous avez une idée !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #!/bin/sh echo "Input file : " $1 echo # 1. Ecriture dans text2.txt des lignes avec ajout de "badline" pour les lignes incompletes (moins de 5 champs) cat $1 | awk -F',' '{if (NF < 5 ) print "badline "$0; else print $0}' > test2.txt # 2. Concatenation des lignes "badline" avec suppression du \n. cat test2.txt | grep badline | sed 'N;s/\n/,/' | sed 's/badline //g' > testout_bad.txt # 3. Redirection des lignes completes dans testout_good.txt cat test2.txt | sed -n '/badline/!p' > testout_good.txt # 4. Fusion des lignes incompletes et completes dans testout.txt cat testout_good.txt testout_bad.txt | sort > testout.txt cat testout.txt![]()
Partager