0
votes

Supprimer les délimiteurs de fin de manière dynamique

Je suis nouveau dans le script et je dois écrire un script pour supprimer le délimiteur indésirable de la dernière ligne du fichier plat qui changera de manière dynamique.

par exemple: p>

1|AK|1,asd|CHN|TN|IN|600001
2|AK|1,asd|CHN|TN|IN|600001
AK|10-01-2019|2||||


1 commentaires

Qu'avez-vous essayé? Quels problèmes as-tu? S'il vous plaît montrez-nous votre code.


3 Réponses :


1
votes

La documentation pour Perl's Split () fonction dit ceci:

Si la limite est omise (ou, de manière équivalente à zéro), elle est généralement traitée comme si elle était plutôt négative mais à l'exception que les champs vides de fuite sont supprimés (les champs de tête à vide sont toujours préservés)

Ainsi, le comportement par défaut de Split () est de supprimer les champs vides de fin. Nous pouvons ensuite utiliser Joindre () pour régénérer l'original Enregistrez moins tous les délimiteurs de fin.

afin qu'il puisse être aussi simple que: xxx

ou, le mettre dans un programme complet qui se lit à partir de Stdin et écrit à stdout : xxx

si vous mettez cela dans un fichier appelé rmTrailing , puis Il peut être exécuté à partir d'une ligne de commande comme ceci: xxx


0 commentaires

1
votes

Les éléments suivants supprimeront les tuyaux de fin de toutes les lignes:

perl -nle'
   print($prev) if defined($prev);
   $prev = $_;
   END {
      if (defined($prev)) {
         $prev =~ s/\|+\z//;
         print($prev);
      }
   }
'


0 commentaires

0
votes

Ce SED One-Liner effectuera le travail: xxx

test: xxx

Vous voyez que seule la dernière ligne a été modifiée. .


0 commentaires