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||||
3 Réponses :
La documentation pour Perl's Split () code> 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) P> BlockQuote>
Ainsi, le comportement par défaut de
Split () code> est de supprimer les champs vides de fin. Nous pouvons ensuite utiliserJoindre () code>pour régénérer l'original Enregistrez moins tous les délimiteurs de fin. p>afin qu'il puisse être aussi simple que: p>
xxx pré> ou, le mettre dans un programme complet qui se lit à partir de
Stdin code> et écrit àstdout code>: p>xxx pré> si vous mettez cela dans un fichier appelé
rmTrailing code>, puis Il peut être exécuté à partir d'une ligne de commande comme ceci: p>xxx pré> p>
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);
}
}
'
Ce SED One-Liner effectuera le travail: Vous voyez que seule la dernière ligne a été modifiée. . p> p> test: h3>
Qu'avez-vous essayé? Quels problèmes as-tu? S'il vous plaît montrez-nous votre code.