2010-04-12 8 views
1

J'essaie de comprendre Perl en suivant la méthode décrite dans le livre "Minimal Perl".perl une alternative à cette bash "chaîne"?

J'ai téléchargé tous les fichiers txt source sur mon propre serveur: results folder

Je suis la sortie d'utiliser plusieurs commandes bash dans une « chaîne » comme ceci:

cat run*.txt | grep '^Bank[[:space:]]Balance'|cut -d ':' -f2 | grep -E '\$[0-9]+' 

Je sais que c'est loin de la plus concis et efficace, mais au moins cela fonctionne ...

Comme notre sujet uni se déplace maintenant sur la partie Perl, je voudrais savoir s'il existe un moyen d'obtenir les mêmes résultats dans une ligne ?

J'essaie quelque chose comme le code suivant, mais coincé au milieu:

Chenxi [email protected] /cygdrive/c/eMarket/output 
$ perl -wlne 'print; if $n=~/^Bank Balance/' 
syntax error at -e line 1, near "if $n" 
Execution of -e aborted due to compilation errors. 

Répondre

3
perl -F/\:/ -ane 'print $F[1]."\n" if /Bank Balance/ && $F[1]!~/\$-/' run*.txt 

aussi est ici une version courte de votre commande bash, awk en utilisant seulement

awk -F": " '/Bank[ \t]*Balance/&& $2!~/\$-/{print $2}' run*.txt 
+0

@ ghostdog74: Merci pour vos deux solutions. –

7

vous ne devriez pas avoir; après l'impression. Alors

perl -wlne 'print $1 if $n=~/^Bank Balance\s*:\s*(\d+)/' 
Questions connexes