Comment puis-je imprimer uniquement certains champs dans un espace séparé de fichier?
J'ai un dossier contenant les éléments suivants contenu de 1000 lignes dans le format suivant:
abc def ghi gkl
Comment puis-je écrire un script Perl pour imprimer uniquement la première et la troisième champs?
abc ghi
Vous devez vous connecter pour publier un commentaire.
Si aucune réponse n'est bonne pour vous encore, je vais essayer d'obtenir la prime 😉
Pour exécuter ce script, étant donné que son nom est
script.pl
, invoquer celle-ci commeoù
FILE
est le fichier que vous souhaitez analyser. Voir aussi http://perldoc.perl.org/perlrun.html. Bonne chance! 😉split ' '
parsplit /\s+/
à split sur tout type d'espaces (répétées ou pas)' '
a une signification spéciale dans Perl.awk
émulation: "split émule le comportement par défaut de l'outil de ligne de commande awk quand le MODÈLE est soit omis ou une chaîne composée d'un seul caractère espace (comme' '
ou"\x20"
, mais pas par exemple/ /
). Dans ce cas, tous les premiers espaces dans des EXPR est retiré avant le fractionnement se produit, et le MOTIF est plutôt traitée comme si elle était/\s+/
"C'est vraiment le genre de déchets pour quelque chose d'aussi puissant que perl, puisque vous pouvez faire la même chose dans un trivial ligne de awk.
awk '{ print $1 $3 }'
awk
quand vous savez Perl.et juste de variété, sur Windows:
et sur Unix
Que perl one-liner:
perl -ane 'print "@F[0,2]\n"' file
Ou en tant que script exécutable:
Exécuter le script comme ceci:
ou
Je suis sûr que je ne devrais pas obtenir la prime, puisque la question demande le résultat sera donné en perl, mais de toute façon:
En bash/ksh/ash/etc:
Dans Windows/DOS:
Avantages: comme les autres ont dit, pas besoin d'apprendre Perle, Awk, rien, juste la connaissance de certains outils. Le résultat à la fois les appels peuvent être enregistrés sur le disque à l'aide de la ">" et ">>" de l'opérateur.
commencez à passer par la la documentation ainsi
/\s+/
est comme unsplit(' ')
sauf que toute fonction de direction espace produit un null premier champ. Un split avec aucun argument vraiment unsplit(' ', $_)
en interne.Un moyen facile est:
Exemple:
Ligne de commande: