in Je sais que dans Perl, y a-t-il quelque chose de comparable à Disons que j'ai une ligne de commande: p> Cela devrait me donner la sortie comme: p> awk code> si je donne plus d'un fichier sous forme d'argument sur AWK code>, il existe deux variables spéciales: nr code> = numéro de ligne correspondant à toutes les lignes de tous les fichiers. p> fnr code> = numéro de ligne du fichier actuel. p> $. code> correspond à nr code> (ligne actuelle parmi les lignes dans tous les fichiers). p> FNR code> de Awk à Perl aussi? P> file1.txt 1
file1.txt 2
file2.txt 1
3 Réponses :
En réalité, le eof code> documentation montre un moyen de faire ceci:
$ perl -ne 'print "$ARGV : $_" if $. == 1; } continue { close ARGV if eof;' *txt
La dernière ligne ne manque pas de "{" et a "}"?
Search.cpan.org/dist/perlsecret/lib/... explique ce que c'est et comment ça fonctionne.
La doublure est équivalente à: perl -ne 'impression "$ argv: $ _" si $. == 1; fermer argv si eof '* txt code>. Le bloc code> continuer code> n'est plus nécessaire car il n'y a pas d'instruction suivante code> à l'intérieur de la boucle principale.
Je trouve que cette situation est un très grand inconvénient pour utiliser Perl. Bien que cette réponse soit sous-optimale, performance-sage et seulement des situations impliquant xargs code>, j'ai généralement trouvé la solution d'emploi que j'utilise 95% du temps. Donc, le scénario de problème: £ git ls-files -z | xargs -0 -n1 perl -ne 'print "$ARGV:$.\t$_" if /#define oom/'
file.h:43 #define oom() exit(-1)
Imprimer "Fichier:", Fichier B> "," Ligne: ", Ligne B>," \ n "; Vous devriez également consulter CATONMAT.NET/BLOG/PERL- one-liners - expliqué-part-deux
Andy est probablement destiné à nommer
__ fichier __ code> et__ ligne __ code>, mais j'ai oublié le formatage du code.