Comment puis-je extraire un mot qui vient après un mot spécifique sous Linux (csh)? Plus précisément, j'ai un fichier qui a une seule ligne qui ressemble à ceci:
[some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data]
Je veux extraire le nombre 100
qui est après le --pe_cnt
Word. Je ne peux pas utiliser sed car cela ne fonctionne que si vous souhaitez extraire une ligne entière. Peut-être que je peux utiliser awk?
De plus, j'ai plusieurs fichiers qui ont des valeurs différentes au lieu de 100
donc j'ai besoin de quelque chose qui extrait la valeur mais qui ne dépend pas de la valeur.
Avec awk
:
awk '{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}' inputFile
En gros, bouclez sur chaque mot de la ligne. Lorsque vous trouvez le premier que vous recherchez, prenez le mot suivant et imprimez-le.
Avec grep
:
grep -oP "(?<=--pe_cnt )[^ ]+" inputFile
Vous pouvez utiliser sed. Créez simplement un groupe de souhaits que vous souhaitez associer et remplacez toute la ligne par le groupe:
sed -n 's/^.*pe_cnt\s\+\([0-9]\+\).*$/\1/p' file
S'il y a un caractère à espace unique entre --pe_cnt
et 100
, vous pourrez peut-être utiliser les assertions lookahead et lookbehind
grep -oP '(?<=--pe_cnt\s)\d+(?=\s+--rd_cnt)'