Le 20/01/2020 à 15:28, nt.guilde@??? a écrit :
> awk -F \; -v s37="sort -t ';' -k 37,37 -k 1,1" -v s1="sort -t ';' -k 1,1" '
> NR==1 {print ; next}
> $37 {print |& s37 ; next}
> !$37 {print |& s1 ; next}
> END {
> close(s37, "to")
> close(s1, "to")
> while ((s37 |& getline) > 0) print
> while ((s1 |& getline) > 0) print
> }
> ' file.csv
Je viens de tester
bash tri-csv1
---
#!/bin/bash
awk -F \; -v s37="sort -t ';' -k 37,37 -k 3,3 " -v s3="sort -t ';' -k
3,3" '\
NR==1 {print ; next} \
$37 {print |& s37 ; next} \
!$3 {print |& s3 ; next} \
END { \
close(s37, "to") \
close(s3, "to") \
while ((s37 |& getline) > 0) print \
while ((s3 |& getline) > 0) print \
} \
' teledir-c59_2.csv
---
$ ./tri-csv1
awk: ligne de commande:8: while ((s37 |& getline) > 0) print \
awk: ligne de commande:8: ^ syntax error
awk: ligne de commande:9: while ((s3 |& getline) > 0) print \
awk: ligne de commande:9: ^ syntax error
awk: ligne de commande:9: while ((s3 |& getline) > 0) print \
awk: ligne de commande:9: ^ syntax error
y-a une erreur donc pas de résultat
-F \; : séparateur de champ
-V s37="sort -t ';' -k 37,37 -k 3,3 " : L'argument -v définit une
variable (var dans l'exemple) qui sera utilisée par la suite dans le
programme.
-v s1="sort -t ';' -k 3,3" '
- NR==1 : La syntaxe est la suivante critère1,critère2 {instructions}.
Les instructions sont exécutées pour toute les lignes entre la ligne
répondant au critère1 et celle au critère2. L'action est exécutée pour
les lignes comprises entre la ligne 2 et 6.
awk 'BEGIN NR==2;NR==6 { print "ligne n°"NR":\ n"$0}
END ' adresse
- pour close et while pas trouvé pour l'instant
suite pour sed après
Anne