9
votes

En utilisant awk pour rechercher des lignes qui ont un certain nombre de chiffres

voici le fichier1 xxx

existe-t-il un ongleiner AWK qui ne trouve que des lignes à trois chiffres dans le premier champ?

awk

0 commentaires

7 Réponses :


0
votes
awk '{ if ($1 ~ /^[0-9][0-9][0-9]$/) print $0}' file
Note that we're using a reg-ex that specifies 3 char-classes (anything inside [..]), of just 0-9. The first field of a file is denoted as $1. The '^' and '$', indicate start and end of field. If we don't have those there, fields with 4 or more digits will also match.I hope this helps.

2 commentaires

devrait probablement être awk '{si ($ 1 ~ / ^ [0-9] [0-9] [0-9] $ /) print 0}' ou correspond à toutes les lignes ayant au moins 3 chiffres, ? (en supposant que l'OP veuille exactement trois chiffres)


Oui, je testais / éditerais et j'ai ajouté cela. Merci pour le 2e ensemble d'yeux!



3
votes
awk '/^[0-9][0-9][0-9]$/ {print $0}' file

0 commentaires

9
votes

Voici un:

awk '$1 ~ /^[0-9]{3}$/' file1


0 commentaires

20
votes
gawk --posix '$1 ~ /^[0-9]{3}$/' file1

2 commentaires

{} Les gammes ne nécessitent pas GAWK, juste un POSIX conforme awk. Vous n'avez pas besoin du drapeau - posix lorsque vous utilisez avec GAWK.


@ Michaelj.barber {} Les gammes sont activées par défaut depuis GAWK 4.0. Dans les versions antérieures, vous devez passer -w re-intervalle ou -w posix (ou équivalents d'options de gnu long) pour l'activer.



10
votes

Si nous pouvons supposer que le premier champ contient uniquement des numéros: xxx pré>

sinon, accédez à l'une des solutions de regex. p>


une solution alternative : P>

awk '$1 >= 100 && $1 <= 999' file1


1 commentaires

Environ 1 000 fois plus lisible que toutes les solutions REGEXP (y compris la mine)



1
votes

Un peu peu orthodoxe mais vous pouvez le faire aussi -

[jaypal~/Temp]$ cat text7
200
201
202
203
204
205
2001
2002
2003
2004
2005
[jaypal~/Temp]$ awk 'BEGIN{FS="";} NF<4{print}' text7
200
201
202
203
204
205


1 commentaires

Peu orthodoxe et inutile. Selon POSIX: "Si FS est une chaîne nulle, le comportement n'est pas spécifié". Et cela ne fonctionne pas lorsque l'entrée contient plus d'un champ.



0
votes
awk '{num=$1/1; if (num == $1) if (length($1) == 3) print $0}' file
Should work with leading zero(s)

0 commentaires