nouveau sur Ubuntu, désolé si cela a déjà été demandé, mais je voudrais un moyen d’analyser un fichier texte qui a un format général de:
-------- step 0 ---- cpu = Time_value -------
Energy = Energy_value1 KinEng = KinEng_value1 Temp = Temp_value1
-------- step 10 ---- cpu = Time_value -------
Energy = Energy_value2 KinEng = KinEng_value2 Temp = Temp_value2
Plus précisément, j'essayais de comprendre comment utiliser awk et/ou grep pour extraire la valeur time et temp_value et les exporter dans un fichier dans des colonnes individuelles
Time_value1 Temp_value1
Time_value2 Temp_value2
etc...
En regardant la documentation awk, j'ai trouvé que awk '/Temp/ {print $9}' file_name
me donnait la valeur temp et que awk '/cpu/ {print $7}' file_name
me donnait la valeur time_value mais comment puis-je rechercher les deux chaînes dans une commande tout en cherchant des colonnes différentes pour leurs chaînes respectives. En d'autres termes, comment puis-je modifier la ligne awk '/cpu|sec/ {print}' file_name
pour inclure les informations de colonne de chaque chaîne.
@steeldriver: le fichier texte est encore plus difficile à lire dans un éditeur réel à cause de son format, mais je vais joindre une capture d'écran de sa vue la plus "propre".
La awk
que vous voulez devrait être comme suit:
awk -F '=' '/^-/{gsub(/\-*$/,"",$2);print $2}' input.txt
L'idée ici est que nous utilisons =
comme séparateur de colonnes (ou dans la terminologie awk). En tant que tel, dans la ligne contenant le temps CPU que vous souhaitez, vous n’avez qu’un =
, ce qui ferait tout ce qui se trouvait à gauche dans le fichier $1
et à sa droite - $2
.
Après cela, c'est la structure simple /PATTERN/ {ACTION}
. Seules les lignes correspondant au motif de départ avec un tiret auront les tirets de fin coupés, puis ce qui reste est le temps CPU.
Vos "unités" sont des groupes de 5 lignes. Dans cette situation, il peut être utile de:
awk '{print $1, $11}' RS="cpu =" logfile
Où RS="cpu ="
redéfinit le séparateur d'enregistrement (RS) en tant que "cpu =". Ensuite, il ne reste plus qu'à imprimer les champs souhaités