2010-12-13 10 views
3

J'ai un énorme fichier que j'ai besoin d'analyser. Ce que je veux faire est de séparer les lignes qui ont certaines valeurs dans une certaine colonne. Donc, c'est comme choisir seulement les données qui appartiennent à une certaine catégorie. Comment cela peut-il être accompli avec une simple commande ou script bash? Par exemple, je souhaite séparer uniquement les lignes qui ont les valeurs 1, 2, 3 ou 4 dans la 8ème colonne. Par exemple, je souhaite séparer uniquement les lignes qui ont des valeurs 1, 2 ou 4. Le fichier est délimité par un espace.Bash: comment choisir les lignes d'un fichier qui ont une valeur particulière dans la colonne

Répondre

4

Vous pouvez utiliser awk comme:

awk '$8 == 1 || $8 == 2 || $8 == 3 || $8 == 4' file 
+0

grâce, aurait dû awk appris. semble être pratique :). – sfactor

+0

Que diriez-vous si le fichier est gzippé et que j'ai besoin de gunzip -c fichier | ...? Je ne pouvais pas lancer la méthode awk dans le tuyau. – Ash

+0

Si le fichier d'entrée est gzippé: gunzip -c input.gz | awk 'BEGIN {FS = "\ t"} $ 5 == "en" || 13 $ == "en" '| gzip> output.gz – Ash

3

Utilisez awk:

awk '$8 >= 1 && $8 <= 4' your_file.txt 
2

Encore une autre réponse awk.

awk '$8 ~ /[1-4]/' file 

Mais, juste pour une certaine variété, une réponse bash

while read line ; do 
    fields=($line) 
    [[ ${fields[7]} =~ [1-4] ]] && echo $line 
done < file 
3

Encore une autre réponse AWK:

awk '$8 ~ /1|2|3|4/' inputfile 
Questions connexes