Amelioration script de merge avec awk
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 :
Code:
1 2 3 4 5
| EMP1,S1,123,
H1W,BOX1
EMP2,S2,456,3R9,BOX2
EMP4,S4,789
,H9F,BOX3 |
Je dois avoir en sortie :
Code:
1 2 3
| 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.
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 :
Code:
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 |
J'ai tenté de jouer avec awk (next, ...) mais sans succès. Merci d'avance si vous avez une idée ! :ccool: