Imprimer uniquement les lignes où le deuxième champ correspond à certains critères
J'ai
1 LINUX param1 value1
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4
J'ai besoin de awk pour imprimer toutes les lignes qui $2
est LINUX
.
Vous devez vous connecter pour publier un commentaire.
Dans
awk
:Voir
awk
par Exemple pour une bonne intro àawk
.Dans
sed
:Voir
sed
par Exemple pour une bonne intro àsed
.toupper
(outolower
) fonctions dansawk
.print $0
, c'est tout ce qu'il faut:awk 'toupper($2)=="LINUX"' test.txt
C'est une affaire dans laquelle vous pouvez utiliser la belle idiomatiques
awk
:Qui est:
awk
lorsque dans une Véritable situation est à imprimer de la ligne courante.$2 == "LINUX"
est vrai à chaque fois que le 2ème champ est LINUX, cela permettra d'imprimer ces lignes dans lesquelles cela se produit.Dans le cas où vous souhaitez imprimer toutes les lignes correspondant
LINUX
peu importe si elle est supérieure ou minuscules, utiliseztoupper()
de capitaliser tous les:Ou
IGNORECASE
avec l'une de ces syntaxs:Les essayer:
edit: modifié pour le compte de la casse
awk
(etsed
dans un commentaire).Dans GNU
sed
de la casse correspond peut être faite en utilisant leI
modificateur:Sera robuste match "linux", "Linux", "LINUX", "LiNuX" et d'autres comme le deuxième champ (après le premier champ qui peut être tout caractère non-blanc) et entouré par la quantité (au moins un) de n'importe quel espace (principalement de l'espace et de l'onglet, bien que vous pouvez utiliser
[:blank:]
à limiter strictement celles-ci).Ma réponse est très en retard, mais personne n'a mentionné: