2010-08-18 4 views
0

Je voudrais extraire quelques lignes d'un fichier texte, j'ai commencé à tweak sed ces derniers temps,extraction de ligne dependin sur la gamme pour colums spécifiques

Je dispose d'un fichier avec la structure

88 3 3 0 0 1 101 111 4 3 
89 3 3 0 0 1 3 4 112 102 
90 3 3 0 0 1 102 112 113 103 
91 3 3 0 0 2 103 113 114 104 

Qu'est-ce que Je voudrais faire est d'extraire les informations selon la deuxième colonne, j'utilise STH comme dans mon script bash (argument 2 est infile)

sed -n '/^[0-9]* [23456789]/ p' < $2 > out 

cependant j'ai différentes entrées autres que le rang e [23456789], par exemple 10, puisqu'il est composé de 1 et 0, pour obtenir que ces deux caractères soient dans la gamme je suppose, mais il y a des entrées avec '1' (pour la deuxième colonne) que je ne sais pas tiens à garder ainsi comment écrire "10 mais pas" 1.

Best, Umut

Répondre

0
sed -rn '/^[0-9]* ([23456789]|10)/ p' < $2 > out 

Vous avez besoin des étendre-regexp support (r) pour avoir le | opérateur (ou)

Une autre façon intéressante est:

sed -rn '/^[0-9]* ([23456789]|[0-9]{2,})/ p' < $2 > out 

Ce qui signifie que [23456789] ou 2 ou plus la répétition d'un chiffre.

+0

Oui, c'est le tour, merci Enrico –

+1

Vous pouvez le faire sans '-r', il vous suffit d'échapper les parenthèses et le caractère de pipe. '\ ([23456789] \ | 10 \)' –

0
sed -rn '/^[0-9]* (2|3|4|5|6|7|8|9|10)/p' < $2 > out 
+1

Vous avez besoin de '-r' ou pour échapper tous ces caractères et parenthèses. –

0

Le instant vous voyez des colonnes de taille variable dans vos données, vous devriez commencer à penser à awk:

awk '$2 > 1 && $2 < 11 {print}{}' 

fera l'affaire en supposant que votre format de fichier est correct.

Questions connexes