Supposons que $ 2 soit ma variable. J'ai essayé de partir de
awk -F\, '{print $2 ":"}'
à
awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'
Mais cela va d’imprimer quelque chose à rien du tout.
Vous imprimez le résultat de gsub
, mais gsub
effectue une modification sur place de $2
au lieu de renvoyer une copie modifiée. Appelez gsub
, puis imprimez:
awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Ces fonctions sont pratiques pour améliorer la lisibilité. Ils renvoient également le résultat coupé:
function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
BEGIN {
# whatever
}
{
# whatever
}
END {
# whatever
}
(Je n'ai pas assez de points pour commenter directement la réponse précédente.)
Pour réduire les espaces au fin de $2
, utilisez:
awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Pour couper les espaces au début de $2
, utilisez:
awk -F\, '{gsub(/^[ \t]+/, "", $2); print $2 ":"}'
Et pour les deux fin et début:
awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Une ligne pour gawk:
gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}'
Une option plus simple:
Vous devez définir la fonction trim, l’utilisation gsub pour un remplacement général. Puis trouver avec une expression régulière si commence ou se termine par un espace (une ou plusieurs fois), renvoie le champ.
awk -F'|' 'function trim(field){
gsub(/^ +| +$/,"", field);
return field
}{
OFS=",";
print trim($2),trim($3)}' stations > lista.csv
Avec ce code est enougth
Et le fichier stations est avec cette structure:
1 | UTAR | U de Tarapacá
3 | VALN | Valparaíso
4 | JRGN | Junta Gorgino
6 | TRPD | Torpederas