J'ai un fichier énorme sur mon serveur UNIX à partir duquel j'ai besoin d'extraire certaines pièces
Le format de la ligne est p> i Utilisez la commande p> filtrer certaines lignes que je veux. Je veux seulement que l'horodatage partiel et les 9 derniers caractères de la ligne soient renvoyés, pas la ligne complète. Comment puis-je faire ça? P> P>
7 Réponses :
Utiliser awk (1) code>:
Vous pouvez utiliser awk code> comme suit:
grep LATENCY file.log | grep CMDTYPE=NEW | awk '{print $2,substr($0,length($0)-9,9)}'
Utiliser n'utiliserais pas 0 $ Assurez-vous d'afficher la fin de la ligne au lieu de la fin du troisième mot?
@Yannick: Oui, j'ai supposé sans raison que "CommandInformation" ne serait qu'un mot. Correction du post avec votre suggestion, merci!
Pas besoin d'utiliser Grep, Awk peut faire cela aussi:
awk '/LATENCY/ && /CMDTYPE=NEW/ {print $2 " " substr($0, length($0)-8)}' file
Je vais argumenter Perl est un meilleur choix que AWK ici:
perl -ne 'next if ! (/LATENCY|CMDTYPE=NEW/ && /^\d+.*\s+(.*)\s+.*(.{9})$/); print "$2 $3\n";'
Vous pouvez tout faire avec SED seul:
couper code> doit faire le travail
Modifier la file d'attente est complète, mais voici un lien utile pour Couper code> Utilisation: ComputerHope .com / Unix / utact.htm
Vous pouvez tout faire avec supposant que vous puissiez créer une regex pour l'horodatage et le reste de la ligne, vous pouvez simplement ajouter: p> [réponse ajoutée pour quelqu'un d'autre qui atterrit ici tenter d'extraire une partie d'une ligne utilisant grep code> à l'aide de
-o code> qui sortit uniquement la correspondance et non la ligne entière.
grep code> où la regex est la partie qu'ils veulent extraire.] em> p> p>