objectif
Aller droit au but pour extraire des colonnes depuis des fichiers plats ou des sorties de commandes: TSV recommandé (sûr), CSV simple toléré, réordonnancement, changement de séparateur, compléments et tranches d’octets.
code minimal
# TSV: garder colonnes 1 et 3, dans l'ordre
cut -f1,3 data.tsv
utilisation
# 1) transformer un JSON en TSV puis extraire des colonnes (nom, statut)
curl -fsS https://api.data.pm/v1/metrics \
| jq -r '.items[] | [.name, (.value|tostring), .unit] | @tsv' \
| cut -f1,2
# 2) CSV simple (sans quotes complexes): extraire 1re et 3e colonnes
# users.csv: id,name,email
cut -d',' -f1,3 users.csv
# 3) réordonner les colonnes (3 puis 1)
cut -f3,1 data.tsv
# 4) changer le séparateur de sortie (GNU cut uniquement)
# TSV -> colonnes 1 et 3, séparateur de sortie = virgule
cut -f1,3 data.tsv --output-delimiter=','
# 5) ne garder que les colonnes non sélectionnées (complément)
cut -f1,2,4 data.tsv --complement
# 6) extraire un range d’octets (fichiers binaires ou fixes)
# 1-8 puis 17-24 (ex: en-têtes)
cut -b1-8,17-24 payload.bin | xxd
# 7) produire un petit rapport lisible (cut + column)
cut -f1,3 data.tsv | column -t
# 8) normaliser en TSV depuis CSV simple avant cut (plus fiable)
tr ',' '\t' < routes.csv | cut -f1,3
variante(s) utile(s)
# A) fallback portable pour changer le séparateur de sortie (BSD/macOS)
# équivalent de --output-delimiter=',' en remplaçant les tabs après coup
cut -f1,3 data.tsv | tr '\t' ','
# B) sélectionner un range de colonnes (ex: de 2 à 5)
cut -f2-5 data.tsv
# C) extraire colonnes depuis des données espacées irrégulièrement
# (normaliser en tabs puis cut)
some_cmd | tr -s ' ' '\t' | cut -f1,4
# D) éviter les pièges du CSV avec quotes/virgules internes: passer par jq/csvkit
# JSON -> TSV (sûr) puis cut
curl -fsS https://api.data.pm/v1/users \
| jq -r '.[] | [.id, .email, .role] | @tsv' \
| cut -f1,3
# CSV robuste (si csvkit dispo):
# csvcut -c id,role users.csv
# E) extraire jusqu’à la fin (open range)
cut -f3- data.tsv
# F) vérifier et forcer un fichier en TSV depuis une liste délimitée exotique (pipe)
tr '|' '\t' < data.pm.export | cut -f1,2,5
notes
- Préférez TSV (
\t) pour des données tabulaires: robuste et sans ambiguïté;cut -ffonctionne nativement. cut -d',' -f...ne gère pas les CSV complexes (champs quotés contenant des virgules). Dans ce cas, convertissez viajq @tsv(si source JSON) ou utilisez un outil CSV dédié (csvkit, Miller).--output-delimiterest propre à GNU cut; sur macOS/BSD, remplacez les tabs partr '\t' ','.- Pour réordonner les colonnes, listez-les dans l’ordre désiré (
-f3,1,2).--complementsupprime les champs listés et garde le reste. - Les slices d’octets (
-b) se font en bytes, pas en caractères UTF-8. Utilisez-les pour formats fixes ou binaires, pas pour du texte multioctet.