> J'ai un fichier csv que je veux trier par
> Categories, First Name, Last Name
>
> Juste la première ligne
> First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2
> Address;E-mail 3 Address;Home Phone;Business Phone;Home Fax;Business
> Fax;Pager;Mobile Phone;Home Street;Home Address 2;Home City;Home State;Home
> Postal Code;Home Country;Business Address;Business Address 2;Business
> City;Business State;Business Postal Code;Business Country;Country
> Code;Related name;Job
> Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web
> Page 2;Categories
$ sort -t \; -k 36,36 -k 1,1 -k 2,2
Avec des lignes de 36 champs, ce sera illisible, même trié ; et
difficile à éditer -- est-ce ce que tu veux faire ? Mets chaque champ
sur une ligne, sépare les enregistrements avec "===" (par exemple),
édite et recrée un fichier csv. Ces quelques lignes pour la première
tâche :
#!/bin/bash
awk -F \; '
NR==1 {n = NF ; for (i=1; i<=NF; i++) f[i]=$(i); print ; next}
1 {
if (NF != n) {
printf "--- error (%d != %d) :\n%s\n", NF, n, $0 >"/dev/stderr"
next
}
for (i=1; i<=NF; i++) if ($(i)) print f[i] "," $(i)
print "==="
}
'
-Nicolas T.