Utilisation de awk pour saisir uniquement des chiffres à partir d'une chaîne
De fond:
J'ai une colonne qui devrait obtenir la saisie de l'utilisateur sous forme de "texte de Description ref12345678". J'ai les scripts existants qui saisir le numéro de référence mais, malheureusement, certains utilisateurs d'ajouter de manière incorrecte ainsi, au lieu de "ref12345678"
il peut être "ref 12345678"
, "RF12345678"
, "abcd12345678"
ou de toute variation. Naturellement la mauvaise mise en forme des sauts de certains des scripts déclenchés.
Pour l'instant je ne peux pas contrôler l'entrée de l'utilisateur dans ce domaine, je tiens donc à rendre les scripts plus tard dans le pipeline juste pour faire le nombre.
Pour le moment je suis le décapage, les lettres avec awk '{gsub(/[[:alpha:]]/, "")}; 1'
, mais la substitution semble comme une solution inefficace. (Je sais que je peux le faire aussi avec sed -n 's/.*[a-zA-Z]//p'
et tr -d '[[:alpha:]]'
mais ils sont essentiellement les mêmes et je veux awk pour plus de programmabilité).
La question est, est-il un moyen de mettre awk pour imprimer uniquement les nombres à partir d'une chaîne, ou un ensemble délimite numérique des éléments dans une chaîne de caractères? (ou de substitution est vraiment la solution la plus efficace pour ce problème).
Donc en résumé: comment puis-je utiliser awk pour $ echo "ref12345678"
pour imprimer uniquement "12345678", sans substitution?
OriginalL'auteur Rainer Tenhunen | 2013-05-17
Vous devez vous connecter pour publier un commentaire.
si awk est pas:
exemple:
avec awk pour votre exemple:
$ echo "ref12345678"| awk -F'[^0-9]*' '{print $2}'
fait le truc sur awk qui est fourni avec OS X.Pourriez-vous nous expliquer comment cela fonctionne?
OriginalL'auteur Kent
Vous pouvez également essayer les opérations suivantes avec awk en supposant qu'il y aura seulement un nombre en une chaîne de caractères:
Cette fonction convertit l'ensemble de votre chaîne numérique, et de la façon que awk est mis en œuvre uniquement les valeurs qui correspondent le numérique description sera à gauche. Ainsi par exemple:
produira:
19
OriginalL'auteur Alex S
Une autre option (en supposant que
GNU awk
) implique de spécifier un non-numérique de l'expression régulière comme un séparateurOriginalL'auteur iruvar