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