Mon fichier contient une donnée au format suivant. Les troisième et quasortingème champs sont la date. Je souhaite conserver uniquement la partie date de ces champs et supprimer la partie heure. La deuxième fraction est toujours “0,0Z”.
Consortingbution:
1,2,2012-04-11T00:06:52.0Z,2012-04-11T00:06:52.0Z
Sortie:
1,2,2012-04-11,2012-04-11
Merci Jitendra
Vous pouvez utiliser sed
comme ceci:
sed 's/T[^,]*//g' file
Ou avec awk
:
awk '{ gsub(/T[^,]*/,"") }1' file
Ou si les deux premiers champs peuvent contenir la lettre ‘T’:
sed 's/\([^,]*,[^,]*,[^T]*\)[^,]*\([^T]*\).*/\1\2/' file
Ou avec awk
:
awk -F, '{ sub(/T.*/,"",$3); sub(/T.*/,"",$4) }1' OFS=, file.txt
Résultats:
1,2,2012-04-11,2012-04-11
Utiliser sed :
sed 's/T[^,]*//g' input_file
1,2,2012-04-11,2012-04-11
Une possibilité est d’utiliser perl pour résoudre ce problème si cela est disponible dans votre environnement.
perl -pe 's/^(\d+),(\d+),(.*)T.*,(.*)T.*/\1,\2,\3,\4/' < yourfile
Les deux premiers champs pouvant contenir T
, awk
devrait être un meilleur choix que sed
:
awk -F, '{sub("T.*","",$3); sub("T.*","",$4); print}' OFS=, input_file
perl -F, -ane '$F[3]=~s/T.*//g;$F[2]=~s/T[^,]*//g;print join ",",@F;' your_file
J’utiliserais les deux virgules et “T” comme séparateurs de champs. Ensuite, $4
et $6
sont les champs de temps. Vous pouvez ensuite supprimer les champs que vous ne voulez pas
awk -F '[,T]' -v OFS=, '{print $1,$2,$3,$5}'