cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
😤 Ce billet a été édité le : 2024-08-09

L’utilitaire de column formate son entrée en plusieurs colonnes. Cette commande permet également d’obtenir une sortie au formatJSON.



Préliminaires

Les fichiers de configuration Linux sont généralement des fichiers textes, les lignes commençant par le caractère # sont ignorées (elles permettent de mettre des commentaires). Le séparateur de champ est suivant le cas l’espace ou le caractère :.

Dans la suite, on utilisera certain de ces fichiers pour produire des flux JSON.



Utilisation de column

Voici un usage classique de la commande column :

sed 's/#.*//' /etc/fstab |
  column --table --table-columns SOURCE,TARGET,TYPE,OPTIONS,PASS,FREQ --table-right PASS,FREQ

Explications :

  • La commande sed supprime les lignes contenant des commentaires (elle commence par le caractère #)
  • La commande column effectue le formatage :
    • Le drapeau --table (ou -t) implique que columns détermine d'abord le nombre de colonnes afin de générer le tableau. Par défaut, les colonnes sont délimitées par des espaces, avec les caractères fournis en utilisant l’option --output-separator.
    • L’option --table-columns permet de les noms des colonnes à l’aide d’une liste de noms séparés par des virgules.
    • L’option --table-right demande d’aligner à droite le texte dans les colonnes spécifiées.

Ce qui donne :

SOURCE                TARGET          TYPE  OPTIONS           PASS  FREQ
proc                  /proc           proc  defaults             0     0
PARTUUID=9b2f03bd-01  /boot/firmware  vfat  defaults             0     2
PARTUUID=9b2f03bd-02  /               ext4  defaults,noatime     0     1


Formater en JSON

Dans la mesure ou l’option --table-columns a été définie dans l’exemple précédant, il suffit d'ajouter le drapeau --json.

sed 's/#.*//' /etc/fstab |
  column --table --table-columns SOURCE,TARGET,TYPE,OPTIONS,PASS,FREQ --table-right PASS,FREQ --json

En réalité, dans cet exemple l’option --table-right est inutile avec l’option --json. Cela revient donc à utiliser :

sed 's/#.*//' /etc/fstab |
  column --table --table-columns SOURCE,TARGET,TYPE,OPTIONS,PASS,FREQ --json

et on obtient :

{
   "table": [
      {
         "source": "proc",
         "target": "/proc",
         "type": "proc",
         "options": "defaults",
         "pass": "0",
         "freq": "0"
      },{
         "source": "PARTUUID=9b2f03bd-01",
         "target": "/boot/firmware",
         "type": "vfat",
         "options": "defaults",
         "pass": "0",
         "freq": "2"
      },{
         "source": "PARTUUID=9b2f03bd-02",
         "target": "/",
         "type": "ext4",
         "options": "defaults,noatime",
         "pass": "0",
         "freq": "1"
      }
   ]
}

On peut bien-sur enchaîner avec jq :

sed 's/#.*//' /etc/fstab |
  column --table --table-columns SOURCE,TARGET,TYPE,OPTIONS,PASS,FREQ --json |
  jq -c '.table[]'

qui produira :

{"source":"proc","target":"/proc","type":"proc","options":"defaults","pass":"0","freq":"0"}
{"source":"PARTUUID=9b2f03bd-01","target":"/boot/firmware","type":"vfat","options":"defaults","pass":"0","freq":"2"}
{"source":"PARTUUID=9b2f03bd-02","target":"/","type":"ext4","options":"defaults,noatime","pass":"0","freq":"1"}


Exemple avec d’autres fichiers de configuration

La liste des utilisateurs :

sed 's/#.*//' /etc/passwd |
  column --json --table-columns 'user,x,uid,gid,name,home,shell' --separator ':'

La liste des groupes :

sed 's/#.*//' /etc/group |
  column --json --table-columns 'group,x,gid,users' --separator ':'

Mais pour ce cas, on ne veut pas avoir null lorsque la liste des utilisateurs est vide, et dans l’autre cas, on veut un tableau contenant les utilisateurs. Pour cela il faut réécrire le champ .user comme suit :

sed 's/#.*//' /etc/group |
  column --json --table-columns 'group,x,gid,users' --separator ':' |
  jq '.table | map( . + {"users": (if .users then .users | split(",") else [] end) } )'


Liens

Les manuels :

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog