La commande suivante ne sélectionne pas la deuxième chaîne de la ligne impaire et la quatrième de la ligne impaire-paire. show_statistic.sh | grep -A 1 vlan | awk '{ if ((NR % 2) == 1) { print $2 } else { print $4 } }'
Il imprime les deuxième et quatrième chaînes de chaque ligne. Qu'est-ce que j'ai fait de mal?Rejoindre chaque ligne avec AWK
Répondre
Il semble que votre résultat attendu provienne des lignes contenant "vlan" et des suivantes.
Votre code fonctionnera avec une réponse unique, mais avec plus d'un réponse à vos résultats seront differents séparés bi une ligne containig seulement « - » comme indiqué dans grep:
-A NUM
Places a line containing a group separator (--) between
contiguous groups of matches. With the -o or --only-matching
option, this has no effect and a warning is given.
Donc, avec cette ligne plus vous voulez que le deuxième argument sur la ligne 1, 4, 7 ... Et la quatrième sur la ligne 2, 5, 8 ...
vous code peut être:
show_statistic.sh | grep -A 1 vlan | awk '{ if ((NR % 3) == 1) { print $2 } else { if (NR % 3 == 2) { print $4 } } }'
J'écris un petit fichier texte à tester:
1line here
2foo
vlan 2a 3a 4a 5a
1 2 3 4 5
bar
line here
vlan 2a 3a 4a 5a
1 2 3 4 5
line here
baz
Le résultat est:
$ grep -A 1 vlan file| awk '{ if ((NR % 3) == 1) { print $2 } else { if (NR % 3 == 2) { print $4 } } }'
2a
4
2a
4
+1 pour trouver une mise en page pour le shell sortie de commande. –
Merci Pierre-Louis Laffont. Séparateur de groupe (-) était la troisième ligne :-) Je l'ai eu – tsoomo
Si la sortie de votre commande shell suit la mise en page du fichier échantillon créé par @ Pierre-LouisLaffont puis est ici la commande complète, vous devez utiliser:
$ awk 'f{print $4;f=0} /vlan/{print $2;f=1}' file
2a
4
2a
4
Lorsque se trouve vlan il imprime le 2ème champ et définit un drapeau pour dire vlan a été trouvé. Sur la ligne suivante, il imprime le 4ème champ et réinitialise le drapeau. Ça ne pouvait pas être plus simple.
ça marche plus vite. Merci @Ed Morton – tsoomo
- 1. Comment résumer chaque énième ligne dans awk?
- 2. awk extraire plusieurs groupes de chaque ligne
- 3. AWK: exécuter CURL sur chaque ligne et parse résultat
- 4. MYSQL "chaque ligne exclue, mais seulement une fois" rejoindre
- 5. Comment puis-je ajouter 'avant chaque ligne en utilisant awk?
- 6. Comment chaque énième ligne a une colonne utilisant awk?
- 7. Créer une nouvelle ligne avec awk Command?
- 8. Linux: AWK en ligne
- 9. manipulation sed/awk + ligne
- 10. Trouver max/min de chaque colonne awk
- 11. traversée de ligne dans awk
- 12. Rejoindre les sauts de ligne dans le fichier FASTA Avec Condition dans ETD/AWK/Perl one-liner
- 13. Ligne verticale avec chaque citation
- 14. SQL Rejoindre uniquement 1 ligne
- 15. époque AWK diff avec la ligne actuelle et précédente
- 16. Comment joindre chaque ligne double?
- 17. Comment établir rejoindre et auto rejoindre sur la même ligne
- 18. Mysql rejoindre obtenir une ligne par match
- 19. SQL pour rejoindre la meilleure ligne correspondante
- 20. impression spéciale avec awk
- 21. multiplier chaque ligne par chaque ligne
- 22. rejoindre
- 23. Supprimer chaque septième ligne en utilisant sed
- 24. Utilisation de chaque ligne de sortie awk en tant que modèle grep
- 25. fonction Exécuter sur chaque ligne rapide avec un montage .bash_profile
- 26. Comment remplacer Nième match dans une ligne avec awk
- 27. Ajout d'une colonne avec awk
- 28. rejoindre les instances de même ligne
- 29. Comment passer un paramètre à une commande dans AWK pour chaque ligne traitée
- 30. lire chaque ligne de fichier en utilisant awk et stocker dans un tableau
Qu'est-ce qu'une ligne impaire? Pouvez-vous montrer quelques exemples d'entrées et de sorties attendues? –
Afficher la sortie de show_statistics.sh et nous dire ce que vous essayez de faire avec une sortie attendue à la fin de votre traitement de la sortie show_statistics.sh. Vous n'avez pas besoin de grep avec awk et vous utilisez mal awk donc nous devons commencer à partir de l'étape 1. –
@ sampson-chen L'anglais n'est pas ma langue maternelle. impair-même peut être 2ème, 4ème, 6ème .. {n = 1 impair-pair = 2 * n, même = 2 * n-1} lignes que notre dictionnaire :-) – tsoomo