Shell: récupération de champ dans une ligne

Résolu
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un fichier csv avec plusieurs ligne de ce type:

1;2;3
13;12;11
20;2;3

Et j'aimerai avoir dans un autre fichier ceci:

Champ 1:1
Champ2:2
Champ3:3
Champ 1:13
Champ2:12
Champ3:11
Champ 1:20
Champ2:2
Champ3:3

J'ai donc fait ceci:

for f in *.csv
do
while read line
do
	$rep/echo "GROUP_FIELD_NAME:Type_objet" >> $fileName
	$rep/echo "GROUP_FIELD_VALUE:'$rep/awk 'BEGIN {FS = ";"}{ print $1 }' $line'" >> $filename

done < $f
done


Mais cela ne fonctionne pas avec awk.

Avez vous une autre commande qui permettrai d'avoir le résultat souhaité ?

Par avance merci.

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    il faut un espace entre Champ et 1 pour Champ1 ?
    $ cat a0
    1;2;3
    13;12;11
    20;2;3 
    $ 
    $ awk -v RS="[;\n]" '{print "Champ" (NR-1)%3+1 ":" $0}' a0
    Champ1:1
    Champ2:2
    Champ3:3
    Champ1:13
    Champ2:12
    Champ3:11
    Champ1:20
    Champ2:2
    Champ3:3 
    $ 
    0
  2. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    Ok je viens de tester et en sortie j'ai ceci:

    Champ1:11;2;3;4;5;6;7;8;9;10;11;12;13
    1;2;3;4;5;6;7;8;9;10;11;12;14
    13;12;11;10;9;8;7;6;5;4;3;2;1
    20;2;3;4;5;6;7;8;9;10;11;12;13

    Le 1 est bien renseigné pour champ 1 mais la suite du fichier vient se concaténer.

    Voilà exactement ce que j'ai comme code :

    $rep/echo "Champ 1:'$rep/awk -v RS="[;\n]" '{print (NR-1)%3+1 $0}' $f'" >> $fileName
    $rep/echo "Champ 2:'$rep/awk -v RS="[;\n]" '{print (NR-1)%3+1 $0}' $f'" >> $fileName
    $rep/echo "Champ 3:'$rep/awk -v RS="[;\n]" '{print (NR-1)%3+1 $0}' $f'" >> $fileName
    


    Je n'ai pas que 3 champs j'en ai 13 mais est ce que cela fait modifier la commande ? J'ai peut être également mal exposer mon sujet au départ...
    0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    il faut exécuter awk qu'une fois
    $ cat a00
    1;2;3;4;5;6;7;8;9;10;11;12;13
    1;2;3;4;5;6;7;8;9;10;11;12;14
    13;12;11;10;9;8;7;6;5;4;3;2;1
    20;2;3;4;5;6;7;8;9;10;11;12;13 
    $ 
    $ awk -v RS="[;\n]" '{print "Champ" (NR-1)%13+1 ":" $0}' a00 | head
    Champ1:1
    Champ2:2
    Champ3:3
    Champ4:4
    Champ5:5
    Champ6:6
    Champ7:7
    Champ8:8
    Champ9:9
    Champ10:10
    $ 
    $ 
    
    0