objectif
Transformer rapidement des sorties en tableaux alignés pour les lire ou les partager (listes de fichiers, métriques, CSV/TSV) en utilisant column. Compatible Linux/macOS, avec délimiteurs sûrs.
code minimal
# aligner un key/value simple
printf '%s\n' "site data.pm" "api https://api.data.pm" | column -t
utilisation
# 1) CSV -> tableau lisible (séparateur virgule)
printf '%s\n' \
"route,method,status" \
"/,GET,200" \
"/health,GET,200" \
"/login,POST,302" \
| column -t -s ','
# 2) TSV (plus sûr quand les valeurs contiennent des virgules)
# générer un TSV puis aligner
printf 'path\tstatus\tbytes\n' > /tmp/report.tsv
printf '/\t200\t10240\n' >> /tmp/report.tsv
printf '/assets/app.js\t200\t532000\n' >> /tmp/report.tsv
column -t -s $'\t' /tmp/report.tsv
# 3) lister taille et nom de fichiers (du + sort + column)
du -sh ./build/* 2>/dev/null | sort -h | column -t
# 4) transformer un JSON en table (jq -> TSV -> column)
curl -fsS https://api.data.pm/v1/metrics \
| jq -r '.items[] | [.name, (.value|tostring), .unit] | @tsv' \
| column -t -s $'\t'
# 5) afficher un diff de numéros de version en colonnes
printf '%s\n' "current v1.8.2" "remote v1.9.0" | column -t
# 6) regrouper des stats (ss, df) et les rendre lisibles
ss -s | sed 's/: \+/\t/' | column -t -s $'\t'
df -hT | column -t
variante(s) utile(s)
# A) largeur maximale d'une colonne (troncature amicale avec awk) avant column
# (utile pour des URLs très longues)
curl -fsS https://api.data.pm/v1/routes \
| jq -r '.[] | [.path, .method, (.latency_ms|tostring)] | @tsv' \
| awk -F'\t' 'BEGIN{OFS="\t"}{if(length($1)>60)$1=substr($1,1,57)"..."; print}' \
| column -t -s $'\t'
# B) forcer une police monospace dans un fichier Markdown (préformaté)
( echo "path\tstatus\tbytes"
echo "/\t200\t10240"
echo "/assets/app.css\t200\t43100" ) \
| column -t -s $'\t' | sed '1s/^/```\n/;$s/$/\n```/'
# C) stabiliser le tri avant affichage
LC_ALL=C sort -t',' -k1,1 routes.csv | column -t -s ','
# D) sorties avec multiples espaces irréguliers: normaliser en un séparateur
printf '%s\n' "name size" "app.js 532000" "app.css 43100" \
| tr -s ' ' '\t' | column -t -s $'\t'
# E) macOS (BSD column) et GNU: options communes (-t, -s). Éviter -o (pas portable).
# Si besoin, fallback sans column via awk:
printf '%s\n' "a bbb" "aa c" \
| awk '
{ for (i=1; i<=NF; i++) if (length($i)>w[i]) w[i]=length($i); rows[NR]=$0 }
END { for (r=1; r<=NR; r++) {
split(rows[r], f, /[ \t]+/)
for (i=1; i<=length(f); i++) printf "%-*s%s", w[i]+2, f[i], (i==length(f) ? ORS : "")
}
}'
notes
-taligne les colonnes,-s <sep>définit le séparateur (,pour CSV,$'\t'pour TSV). Préférez TSV pour éviter les collisions de virgules.- Normalisez en amont: utilisez
jq -r ... | @tsv,tr -s ' ' '\t', ouawkpour fabriquer des colonnes propres. - Sur macOS (BSD),
columnne supporte pas certaines options GNU comme-o. Restez sur-tet-spour la portabilité. - Gardez des largeurs raisonnables pour la lisibilité (tronquez les champs trop longs avant
column). columnmet en forme l’affichage; pour des exports sérieux (CSV/TSV), conservez aussi la version brute à côté du rendu.