Utilisez sed ou awk pour corriger le format de la date
Je suis en train de convertir une page HTML contenant un tableau .fichier csv à l'aide d'un bash
script.
Jusqu'à présent, j'ai accompli les étapes suivantes:
- Convertir au format Unix (avec
dos2unix
) - Supprimer tous les espaces et les tabulations (avec
sed 's/[ \t]//g'
) - Supprimer toutes les lignes vides (avec
sed ':a;N;$!ba;s/\n//g'
) (cela est nécessaire, parce que le fichier HTML, une ligne vide pour chaque cellule de la table... c'est pas de ma faute) - Supprimer la unnecesary
<td>
et<tr>
balises (avecsed 's/<t.>//g'
) - Remplacer
</td>
avec ',' (avecsed 's/<\/td/,/g'
) - Remplacer
</tr>
avec fin-de-ligne (\n
) caractères (avecsed 's/<\/tr/\n/g'
)
Bien sûr, je suis en train de mettre tout cela dans un pipeline. Jusqu'à présent, c'est génial de travailler. Il y a une dernière étape, je suis coincé avec: La table a une colonne avec des dates, qui a le format dd/mm/yyyy
et je voudrais les convertir en yyyy-mm-dd
.
Est-il un (simple) de façon à faire (avec sed
ou awk
)?
Échantillon de données (après tout sed
pipe):
500,2,13/09/2007,30000.00,12,B-1
501,2,15/09/2007,14000.00,8,B-2
Résultat attendu:
500,2,2007-09-13,30000.00,12,B-1
501,2,2007-09-15,14000.00,8,B-2
La raison pour laquelle je besoin de le faire c'est parce que j'ai besoin d'importer ces données pour MySQL. J'ai pu ouvrir le fichier dans Excel et modifier le format à la main, mais je voudrais sauter.
source d'informationauteur Barranka | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
Awk
pouvez effectuer cette tâche assez facilement:Il rendements:
awk
serait travailler pour cette:comme l'un de ces
bash
options:Si vous arrive d'utiliser
ksh
où un shell interne est exécuté n'est pas utilisé pour la dernière composante d'un pipeline, cela devrait fonctionner ainsi:Au cours des dernières
bash
vous pouvez également utilisershopt -s lastpipe
dans un script pour permettre l'invocation ci-dessus à travailler ainsi, mais il ne fonctionne pas sur la ligne de commande (merci à @mklement0 dans les commentaires ci-dessous).Je vais laisser à vous de déterminer comment l'intégrer avec le reste...
Jusqu'à présent, toutes les réponses sont très spécifiques au cas de l'OP. Voici une approche plus générale, en cours d'exécution (GNU, pour
-d
option)date
parawk
:Bien sûr, cette approche fonctionne comme est seulement si l'entrée format de la date est gérée par
date
. AFAICS ce n'est pas le cas pourdd/mm/yyyy
malheureusement. On peut essayer d'autres commandes quedate
(pas testé).Modifier : mise en œuvre mklement0 commentaire.
Edit2 : en Fait, cela ne fonctionne pas avec
mawk
qui est par défaut de Debianawk
mise en œuvre. La solution la plus évidente consiste à installergawk
lorsque cela est possible.correction à awk supposons que vous cherchez aaaa-mm-jj (pas aaaa-jj-mm)