• [^] # Re: .

    Posté par . En réponse au message Remplacer des cellules. Évalué à 2.

    Pour l'exemple :

    $ cat 2015.csv
    c000,Z,bob,bob.z,000000
    $ cat 2016.csv
    c999,Z,bob,bob.z,(déjà attribué)
    $ join -t',' <(tail -n +1 2016.csv | sort -k4,4 -t,) <(tail -n +1 2015.csv | sort -k4,4 -t,) -j 4 -o 1.1,1.2,1.3,1.4,2.5
    c999,Z,bob,bob.z,000000

    Le tail -n +2 fait disparaître la première ligne. Si l'entête est présente, il est nécessaire.

    Petite correction par rapport à mon message précédent, j'ai compris que l'identifiant de la ligne est le champ 4 (bob.z). Dans mon précédent message j'avais supposé qu'il était composite (champs 2 à 4). Ça me paraissait pas clair, certainement parce qu'en SQL on a l'habitude de le faire figurer en premier.

    Donc si on considère que tes 2 fichiers ont une entête d'une ligne et que l'identifiant d'une ligne est le champ 4, pour l'exemple précédent ça donne :

    $ grep -v '(déjà attribué)' 2016.csv | cat - <(join -t',' <(tail -n +2 2016.csv | sort -k4,4 -t,) <(tail -n +2 2015.csv | sort -k4,4 -t,) -j 4 -o 1.1,1.2,1.3,1.4,2.5)
    CLASSE,NOM,PRENOM,LOGIN,MOT DE PASSE
    c601,Z,bob,bob.z,t954fd
    c502,A,antoine,antoine.a,4f56yg
    c404,B,micheline,micheline.b,654pgh

    j'ai des doublons (triplons, quadru-,etc.) incompréhensibles dans mon fichier original

    Tu as un exemple ? sort permet d'enlever les doublons (uniq aussi d'ailleurs)