Utilisation de AWK pour trouver le plus petit et le plus grand nombre dans une colonne?
Si j'ai un fichier avec quelques colonnes et je veux utiliser un AWK commande pour afficher le plus grand et le plus petit nombre dans une colonne particulière!
exemple:
a 212
b 323
c 23
d 45
e 54
f 102
Je veux que ma commande à montrer que le numéro le plus bas est de 23
et une autre commande-à-dire le nombre le plus élevé est de 323
Je n'ai aucune idée pourquoi les réponses ne sont pas de travail! J'ai mis un plus réaliste de l'exemple de mon fichier( je devrais peut-être mentionner que l'onglet est déterminé)
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="# high-quality bases">
##FORMAT=<ID=SP,Number=1,Type=Integer,Description="Phred-scaled strand bias P-value">
##FORMAT=<ID=PL,Number=-1,Type=Integer,Description="List of Phred-scaled genotype likelihoods, number of values is (#ALT+1)*(#ALT+2)/2">
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT rmdup_wl_25248.bam
Chr10 247 . T C 7.8 . DP=37;AF1=0.5;CI95=0.5,0.5;DP4=7,1,19,0;MQ=15;FQ=6.38;PV4=0.3,1,0.038,1 GT:PL:GQ 0/1:37,0,34:36
Chr10 447 . A C 75 . DP=30;AF1=1;CI95=1,1;DP4=0,0,22,5;MQ=14;FQ=-108 GT:PL:GQ 1/1:108,81,0:99
Chr10 449 . G C 35.2 . DP=33;AF1=1;CI95=0.5,1;DP4=3,2,20,3;MQ=14;FQ=-44;PV4=0.21,1.7e-06,1,0.34 GT:PL:GQ 1/1:68,17,0:31
Chr10 517 . G A 222 . DP=197;AF1=1;CI95=1,1;DP4=0,0,128,62;MQ=24;FQ=-282 GT:PL:GQ 1/1:255,255,0:99
Chr10 761 . G A 27 . DP=185;AF1=0.5;CI95=0.5,0.5;DP4=24,71,8,54;MQ=20;FQ=30;PV4=0.07,8.4e-50,1,1 GT:PL:GQ 0/1:57,0,149:60
Chr10 1829 . A G 3.01 . DP=74;AF1=0.4998;CI95=0.5,0.5;DP4=18,0,54,0;MQ=19;FQ=4.68;PV4=1,9.1e-12,0.003,1 GT:PL:GQ 0/1:30,0,45:28
Je dois dire que j'ai déjà ajouter hors ligne qui commence par # si c'est la commande que j'utilise:
awk '$1 !~/#/' | awk -F'\t' 'BEGIN{first=1;} {if (first) { max = min = $6; first = 0; next;} if (max < $6) max=$6; if (min > $6) min=$6; } END { print min, max }' wl_25210_filtered.vcf
awk '$1 !~/#/' | awk -F'\t' 'BEGIN{getline;min=max=$6} NF{ max=(max>$6)?max:$6 min=(min>$6)?$6:min} END{print min,max}' wl_25210_filtered.vcf
et
awk '$1 !~/#/' | awk -F'\t' '
NR==2{min=max=$6;next}
NR>2 && NF{
max=(max>$6)?max:$6
min=(min>$6)?$6:min
}
END{print min,max}' wl_25210_filtered.vcf
le problème est que j'ai étiquette sur le dessus de chaque colonne et quand je lance toutes les lignes que vous les gars ont donné. J'ai toujours l'étiquette imprimée
Voir ma réponse mis à jour et de publier un mieux la prochaine fois.
Vérifier mes mises à jour de réponse.
n'importe quel outil: stackoverflow.com/questions/9789806/...
Voir ma réponse mis à jour et de publier un mieux la prochaine fois.
Vérifier mes mises à jour de réponse.
n'importe quel outil: stackoverflow.com/questions/9789806/...
OriginalL'auteur mahmood | 2011-12-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer deux fonctions définies par l'utilisateur et de les utiliser selon votre besoin. Cela vous donnera plus de solution générique.
Dans la solution ci-dessus, il y a 2 fonctions définies par l'utilisateur -
max
etmin
. Nous stockons la colonne 2 dans un tableau. Vous pouvez stocker chacun de vos colonnes comme ceci. Dans leEND
déclaration, vous pouvez appeler la fonction et de stocker la valeur dans une variable et de l'imprimer.Espérons que cette aide!
Mise à jour:
Exécuté la suite comme par exemple le plus récent -
de sorte que les colonnes qui voulez-vous max amd min? Votre question n'est pas de le mentionner.
OriginalL'auteur jaypal singh
Si votre fichier contient des lignes vides, ni des solutions fonctionnent.
Pour la manipulation correcte des lignes vides essayez ceci:
Puis exécutez cette commande:
Au premier abord, il attrape la première ligne du fichier pour définir min et max.
Que pour chaque ligne non vide il utiliser l'opérateur ternaire vérifier,
si un nouveau min ou max a été trouvé. À la fin, le résultat de l'ist imprimé.
HTH Chris
OriginalL'auteur Chris
OriginalL'auteur lel7lel7
awk 'NR==1 {min=$2; max=$2; next} max < $2 {max=$2} min > $2 {min=$2} END {print min, max}' file
le problème est que j'ai étiquette sur le dessus de chaque colonne et quand je lance toutes les lignes que vous les gars ont donné. J'ai toujours l'étiquette imprimée
OriginalL'auteur codaddict
Utiliser le
BEGIN
etEND
blocs d'initialiser et d'imprimer des variables de garder une trace de la min et max.par exemple,
voir cet article sur ce que les "ex" signifie: secure.wikimedia.org/wikipedia/en/wiki/E.g.#exempli_gratia je pense qu'il est sûr de laisser les op de prendre la décision sur l'a priori de ses données.
print min max
sortie23323
- vous besoin d'une virgule.le problème est que j'ai étiquette sur le dessus de chaque colonne et quand je lance toutes les lignes que vous les gars ont donné. J'ai toujours l'étiquette imprimée
Cela a fonctionné pour moi... ces hypothèses sont correctes pour mes données 🙂
OriginalL'auteur Christopher Neylan
Min peut être trouvé par:
Ce sera de sortie le minimum et le maximum, séparés par des virgules
OriginalL'auteur kakoma