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
3
A
Répondre
4
Vous pouvez utiliser awk comme:
awk '$8 == 1 || $8 == 2 || $8 == 3 || $8 == 4' file
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
grâce, aurait dû awk appris. semble être pratique :). – sfactor
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
Si le fichier d'entrée est gzippé: gunzip -c input.gz | awk 'BEGIN {FS = "\ t"} $ 5 == "en" || 13 $ == "en" '| gzip> output.gz – Ash