awk ou grep? – Imprimer le mot-clé et les colonnes suivantes

Jai fait quelques benchmarks et le résultat est un seul fichier contenant plusieurs résultats avec le format suivant

[blaaa] 1st run T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 [blaaaa...] 2nd run T/V N NB P Q Time ========================== 4 42 4 1 2 1.22 

Je souhaite uniquement obtenir les temps dexécution des différentes exécutions que jai effectuées. Est-il donc possible de grep « Time » et dimprimer la colonne suivante mais une seule? Ou même pour imprimer uniquement

1.02 1.22 

pour mon exemple ci-dessus? Je préférerais imprimer uniquement les trois colonnes de résultats sans la partie blaa: D

Commentaires

  • Vous voulez dire la même colonne, la suivante mais une ligne ?

Réponse

En supposant que Time est toujours dans le sixième champ:

$ awk "$6 == "Time" {t = NR} t && NR == t+2 {print $6}" file 1.02 1.22 

Vous pouvez également utiliser getline deux fois – quick « n » dirty :

awk "$6 == "Time" {getline; getline; print $6}" file 

(« dirty » car il ne « t vérifie pas la getline valeur de retour).

Commentaires

  • Ou utilisez $NF si ' est toujours la dernière colonne.
  • @Kusalananda oui bon point

Réponse

$ grep -o "Time\|[0-9\.]\+$" file Time 1.02 Time 1.22 $ grep -o "[0-9\.]\+$" file 1.02 1.22 $ grep -A2 ^T/V file T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 -- T/V N NB P Q Time ========================== 4 42 4 1 2 1.22 

Les résultats sont séparés par -- dans le dernier grep qui peut être supprimé avec:

$ grep -A2 ^T/V file | grep -v "^--" 

Et avec les lignes ==== supprimées :

$ grep -A2 ^T/V file | grep -v "^--\|=\+" 

Réponse

Vous avez obtenu deux réponses en utilisant awk and grep, vous pouvez également essayer sed:

sed -E "/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d" file_name 

Ici /===*/, correspondra à ===.., puis il ira à la ligne suivante et trouvera les nombres à virgule flottante avec décimal entre eux, et sautera et supprimera toutes les autres lignes.

Il affichera la sortie comme:

1.02 1.22 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *