Je comprends comment utiliser la fonction printf de awk, mais je ne veux pas spécifier chaque champ.
Par exemple, supposons qu'il s'agit de mon fichier:
c1|c2|c3|c4|c5
c6|c7|c8|c9|c10
c11|c12|c13|c14|c15
Je veux le formater pour que le premier champ de chaque enregistrement soit la largeur de c11 - la cellule la plus longue du premier champ:
c1 |c2|c3|c4|c5
c6 |c7|c8|c9|c10
c11|c12|c13|c14|c15
Je comprends que je pourrais préciser:
awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile
Supposons que je sais ce que je veux que la largeur de la première colonne soit, mais je ne sais PAS combien de champs sont dans le fichier. Fondamentalement, je veux faire quelque chose comme:
... '{printf "%-3s|", $1}'
... puis imprimez le reste des champs dans leur format d'origine.
sed 's/|/'' '' '' |/;s/\(...\) */\1/'
(ici en ajoutant des guillemets supplémentaires pour insérer ces 3 espaces alors que les commentaires SE pressent les espaces contigus en un seul)