2010-08-11 17 views
1

Je souhaite extraire le nombre variable de chiffres entre deux motifs, par exemple:chiffres d'extraction entre 2 motifs awk/egrep

correction:

blah blah.... AAM #6,blah blah 

blah blah.... AAM #10 , blah blah 

blah blah.... AAM #100 , blah blah 

sortie: 6, 10 et 100

Je dois extraire les numéros entre AMA # et ,

Répondre

0

En supposant que les deux modèles les chiffres sont censés être entre sont AAM# et ,

gawk 'match($0, /AAM #([[:digit:]]+)[[:space:]]*,/, a) {print a[1]}'

+0

Cela fonctionne bien. Merci!! – aapl

+0

J'essayais de l'utiliser dans le cadre d'une recherche plus large et je rencontre des erreurs. Le cmd est sed -n "/ COMPLETE/p" 1.txt | gawk 'BEGIN {FS = "/"} {printf "% s% s:% s \ n", substr ($ 4,1,10), substr ($ 6,8,1), match ($ 7,/AAM # ([[: digit:]] +) [[: space:]]?, /, a) a [1]} 'J'essaie d'obtenir le chiffre en 3ème% s de printf et je vois que le nombre est précédé de un compte (2 ou 3). Une idée de ce que mon erreur est? – aapl

0

essayer une expression régulière comme (? < = #) \ d +

0

Pas besoin d'utiliser sed si vous utilisez awk. C'est redondant.

gawk 'BEGIN{FS="/"}/COMPLETED/{ 
    match($7, /AAM #([[:digit:]]+)[[:space:]]?,/, a) 
    printf "%s %s:%s \n", substr($4,1,10),substr($6,8,1), a[1] 
} ' file 
+0

Encore mieux. Cela fait 15 ans que j'ai écrit. J'ai essayé le ci-dessus et il y a une erreur de syntaxe à printf. Ajouté {} comme ça et cela donne des résultats incorrects. gawk 'BEGIN {FS = "/"}/COMPLETED/{match ($ 7,/AAM # ([[: chiffre:]] +) [[: espace:]]?, /, A)} {printf " % s% s:% s \ n ", substr ($ 4,1,10), substr ($ 6,8,1), un fichier [1]} ' – aapl

+0

Il n'y a pas d'erreur de syntaxe dans le scrip @ ghostdog74 posté, vous doit avoir foiré le copier/coller. En ajoutant ces parenthèses, vous déplacez le printf à l'extérieur du bloc qui est seulement exécuté quand COMPLETED est trouvé et change donc significativement le script. –

1
$ cat file 
blah blah.... AAM #6,blah blah 
blah blah.... AAM #10 , blah blah 
blah blah.... AAM #100 , blah blah 

$ awk -F'(AAM #| *,)' '{print $2}' file 
6 
10 
100