Garniture attaque et de fuite des espaces à partir d'une chaîne en awk
Je suis en train de supprimer attaque et de fuite de l'espace dans la 2ème colonne de la ci-dessous input.txt
:
Name, Order
Trim, working
cat,cat1
J'ai utilisé le ci-dessous awk
pour supprimer attaque et de fuite de l'espace dans la 2e colonne, mais il ne fonctionne pas. Ce qui me manque?
awk -F, '{$2=$2};1' input.txt
Cela donne le résultat sous la forme:
Name, Order
Trim, working
cat,cat1
Attaque et de fuite des espaces ne sont pas supprimés.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez couper tous les espaces, seulement dans les lignes qui ont une virgule, et l'utilisation
awk
, puis le suivant va travailler pour vous:Si vous souhaitez supprimer les espaces dans la deuxième colonne, modifier l'expression de
Noter que
gsub
remplace le caractère//
avec la deuxième expression, la variable qui est la troisième paramètre et le faitin-place
- en d'autres termes, quand c'est fait, le$0
(ou$2
) a été modifié.Explication complète:
MODIFIER je tiens à souligner que @BMW solution est la meilleure, qu'elle garnitures seule attaque et de fuite des espaces avec deux successives
gsub
commandes. Tout en donnant le crédit je vais vous donner une explication de la façon dont il fonctionne.gsub
solution. Il également utiliser le caractère de classe de l'espace qui est la meilleure chose à faire.supprimer attaque et de fuite espace blanc dans la 2ème colonne
une autre façon par un gsub:
^
et$
ancres dans deuxgsub
commandes. Plus complexe, mais sur l'argent.Je voudrais utiliser
sed
:Cela permettra d'éliminer à la pointe de l'espace après la
,
.Sortie:
Plus générale pourrait être la suivante, il va supprimer éventuellement, plusieurs espaces et/ou des tabulations après la
,
:Il travaillera également avec plus de deux colonnes en raison de l'modificateur
/g
@Floris demandé à la discussion pour trouver une solution qui supprime fin et de et de fin d'url dans chaque colonne (même la première et la dernière), tandis que ne pas supprimer les espaces blancs au milieu d'une colonne:
OMI
sed
est l'outil idéal pour ce travail. Cependant, voici une solution avecawk
parce que vous avez demandé que:Une solution simple qui vient à l'esprit pour enlever tous les espaces est
tr -d
:awk
solution supprime de fuite des espaces...?sed
est mieux adapté pour ce travail que awk - parce que c'est un texte de l'édition de tâche, leawk
script devrait fonctionner. Je l'ai testé. Qu'est-ce que le mal?sed
de commande n'apparaît pas à supprimer les espaces à droite soit. Vient de mettre> output.txt
à la fin, de l'ouvrir dans un éditeur de texte et vous verrez...,
Je viens de tomber sur ce. La bonne réponse est:
La suite semble fonctionner:
il suffit d'utiliser un regex comme séparateur:
', *' - pour les espaces
' *,' - pour les espaces de fin de
pour les deux attaque et de fuite:
Solution la plus simple est probablement d'utiliser
tr
Si il est sûr de supposer un seul ensemble d'espaces dans la deuxième colonne (qui est à l'origine d'exemple):
awk '{print $1$2}' /tmp/input.txt
L'ajout d'un autre domaine, par exemple,
awk '{print $1$2$3}' /tmp/input.txt
l'attraper par deux ensembles d'espaces (jusqu'à trois mots dans la colonne deux), et ne cassera pas si il y a de moins en moins.Si vous avez une durée indéterminée (grand) nombre de l'espace délimité par des mots, je préfère utiliser l'une des suggestions précédentes, sinon cette solution est la plus simple, vous trouverez à l'aide de awk.