et cut, si on lui indique l’espace comme séparateur, considère alors qu’il s’agit de plusieurs champs vides. Comportement qui a sûrement une bonne raison d’être, mais que je ne saisi pas.
C’est que la plupart de ces outils viennent d’une époque où les choses devaient être KISS et là il s’agit de pouvoir manipuler des fichiers DSV tous bêtes (contrairement à cette immondice de CSV...) Un exemple connu de ce type est le fichier /etc/passwd (et aussi la variable PATH) avec -d ':'
et tu pourrais avoir une application qui utilise des espaces, soit -d ' '
(dans tous les cas, il faut éviter la collision de délimiteur —par exemple avec le blanc souligné ici mais ce pourrait être un autre espacement comme l’insécable)
Avec ce type de format, DSV, la convention a toujours été que tous les champs soient présents, même vides. Dans ce cas, on a deux successions de délimiteur...
jsmith:x:1001:1000::/home/jsmith:/bin/sh
...règle qui ne change pas selon le délimiteur (on a dit kiss, pas avec des exceptions comme en français)
jsmithx10011000/home/jsmith/bin/sh
(dans cet exemple, en ayant changé le délimiteur, on ne casse pas notre cut -d ' ' -f 6 héhé)
Alors que awk considère les espaces multiples comme un seul séparateur.
C’est un poil plus subtil. Quand AWK ont mis au point l’outil, c’était pour traiter des fichiers avec une structuration un peu plus complexe et ils ont prévu de pouvoir pratiquement tout définir (comprendre décrire le format du fichier...) Du coup, au lieu de travailler ligne par ligne, leur programme gobe tout le fichier et se fait un tableau interne dont les lignes sont découpées au niveau de la valeur de RS (qui est le saut de ligne par défaut) et les colonnes/champs (cette fois-ci variables —i.e. contrairement à du DSV toutes les lignes ne sont pas obligées d’avoir le même nombre de champs) au niveau de FS (qui est toute succession de blancs par défauts, comme la variable IFS pour le shell...) :) Tu as bien un seul séparateur, et c’est là sa différence, le séparateur n’est plus un seul caractère-délimiteur mais une expression rationnelle (soit [:blank:]...)
C’est à cause de ce traitement plus coûteux que cet utilitaire n’a pas simplement remplacé les autres : chacun répond à des besoins différents, malgré la ressemblance de prime abord.
awk -F ' ' '{print 3ドル}' (on utilise comme séparateur de champs, le caractère espace, et non la regexp par défaut) devra te donner le même résultat que cut -d ' ' -f 3
awk -F ':' '{print 1ドル}' devra te donner le même résultat que cut -d ':' -f 1
Ressemblance de prime abord parce-que AWK ont prévu aussi qu’on puisse personnaliser à la sortie/affichage les séparateurs de champs (valeur de OFS qui est par défaut l’espace unique) et d’enregistrement (valeur de ORS qui est par défaut le saut de ligne)
awk -F '|' '{print 2,ドル4ドル}' va, par défaut, afficher les deux champs séparés par une espace... tandis que cut -d '|' -f 2,4 va garder le même séparateur (et il n’est pas prévu de changer cela par défaut sauf en enchainant avec un tr '|' ' ' par exemple.)
awk -F ' ' '{print 3,ドル1ドル}' va bien nous sortir successivement les troisièmes et premiers champs... tandis que cut -d ' ' -f 3,1 est pareil à cut -d ' ' -f 1,3 car les champs ne sont pas réordonnés...
"It is seldom that liberty of any kind is lost all at once." ― David Hume
[^] # Re: Remarques
Posté par Gil Cot ✔ (site web personnel, Mastodon) . En réponse au message Wrapper for ALSA recording of playback device. Évalué à 3.
C’est que la plupart de ces outils viennent d’une époque où les choses devaient être KISS et là il s’agit de pouvoir manipuler des fichiers DSV tous bêtes (contrairement à cette immondice de CSV...) Un exemple connu de ce type est le fichier
/etc/passwd(et aussi la variablePATH) avec-d ':'l’équivalent pour Markdown, sauce GFM et similaires, serait avec
-d '|'et tu pourrais avoir une application qui utilise des espaces, soit
-d ' '(dans tous les cas, il faut éviter la collision de délimiteur —par exemple avec le blanc souligné ici mais ce pourrait être un autre espacement comme l’insécable)
Avec ce type de format, DSV, la convention a toujours été que tous les champs soient présents, même vides. Dans ce cas, on a deux successions de délimiteur...
...règle qui ne change pas selon le délimiteur (on a dit kiss, pas avec des exceptions comme en français)
(dans cet exemple, en ayant changé le délimiteur, on ne casse pas notre
cut -d ' ' -f 6héhé)C’est un poil plus subtil. Quand AWK ont mis au point l’outil, c’était pour traiter des fichiers avec une structuration un peu plus complexe et ils ont prévu de pouvoir pratiquement tout définir (comprendre décrire le format du fichier...) Du coup, au lieu de travailler ligne par ligne, leur programme gobe tout le fichier et se fait un tableau interne dont les lignes sont découpées au niveau de la valeur de
RS(qui est le saut de ligne par défaut) et les colonnes/champs (cette fois-ci variables —i.e. contrairement à du DSV toutes les lignes ne sont pas obligées d’avoir le même nombre de champs) au niveau deFS(qui est toute succession de blancs par défauts, comme la variableIFSpour le shell...) :) Tu as bien un seul séparateur, et c’est là sa différence, le séparateur n’est plus un seul caractère-délimiteur mais une expression rationnelle (soit[:blank:]...)C’est à cause de ce traitement plus coûteux que cet utilitaire n’a pas simplement remplacé les autres : chacun répond à des besoins différents, malgré la ressemblance de prime abord.
awk -F ' ' '{print 3ドル}'(on utilise comme séparateur de champs, le caractère espace, et non la regexp par défaut) devra te donner le même résultat quecut -d ' ' -f 3awk -F ':' '{print 1ドル}'devra te donner le même résultat quecut -d ':' -f 1Ressemblance de prime abord parce-que AWK ont prévu aussi qu’on puisse personnaliser à la sortie/affichage les séparateurs de champs (valeur de
OFSqui est par défaut l’espace unique) et d’enregistrement (valeur deORSqui est par défaut le saut de ligne)awk -F '|' '{print 2,ドル4ドル}'va, par défaut, afficher les deux champs séparés par une espace... tandis quecut -d '|' -f 2,4va garder le même séparateur (et il n’est pas prévu de changer cela par défaut sauf en enchainant avec untr '|' ' 'par exemple.)awk -F ' ' '{print 3,ドル1ドル}'va bien nous sortir successivement les troisièmes et premiers champs... tandis quecut -d ' ' -f 3,1est pareil àcut -d ' ' -f 1,3car les champs ne sont pas réordonnés..."It is seldom that liberty of any kind is lost all at once." ― David Hume