/ / Comment puis-je convertir un fichier contenant des chaînes de temps unix en dates lisibles par l'homme? - perl, bash, unix-timestamp

Comment convertir un fichier contenant des chaînes de temps unix en dates lisibles par l'homme? - perl, bash, unix-timestamp

Je traite un fichier plein de chaînes de temps Unix. Je veux tous les convertir en lisibles par l'homme.

Le fichier ressemble à ceci:

1153335401
1153448586
1153476729
1153494310
1153603662
1153640211

Voici le script:

#! /bin/bash
FILE="test.txt"
cat $FILE | while read line; do
perl -e "print scalar(gmtime($line)), "n""
done

Cela ne fonctionne pas. La sortie que j'obtiens est Jeu 1 janv 00:00:00 1970 pour chaque ligne. Je pense que les sauts de ligne sont ramassés et c'est pourquoi cela ne fonctionne pas. Des idées? J'utilise Mac OSX, c'est ce qui fait la différence.

Réponses:

9 pour la réponse № 1
$ perl -lne "print scalar gmtime $ _" test.txt Mer.19 juil 18:56:41 2006 Ven 21 juil 02:23:06 2006 Ven 21 juil 10:12:09 2006 Ven.21 juil.15: 05: 10 2006 Sam.22 juil.21: 27: 42 2006 23 juil. 07:36:51 2006

3 pour la réponse № 2

Car $line est entre guillemets simples, il n'est pas traité par bash, et ainsi $line est traité comme une variable Perl (non définie) plutôt que comme une variable bash.

Vous n'avez pas besoin while read boucle bash; Perl peut faire le bouclage lui-même en utilisant son -n option.

perl -nE "say scalar(gmtime($_))" test.txt

(en utilisant -E pour activer say, qui ajoute automatiquement une nouvelle ligne)


1 pour la réponse № 3

Don "t utiliser cat.

#! /bin/bash
file="test.txt"
while read line
do
date -d @$line
done < "$file"

1 pour la réponse № 4

Ce n'est pas la rupture de ligne, c'est que le $line à l'intérieur du script Perl est une variable différente de la $line dans le script bash. Tu pourrais essayer:

perl -e "print scalar(gmtime($line)),qq/\n/"

Notez les guillemets doubles, qui permettent à bash d'effectuer une interpolation variable.


0 pour la réponse № 5

Pas besoin de Perl:

awk "{ print strftime("%c", $0) }" somefile.txt

0 pour la réponse № 6

Le problème est que vous n’avez rien attribué au $line variable, il a donc par défaut une valeur nulle, c'est pourquoi vous obtenez toujours Jeu 1 janv 00:00:00 1970 en sortie.

réponse de gbacon est à peu près aussi lisse que possible en Perl.


0 pour la réponse № 7

Solution date / xargs GNU:

  xargs -i  date -d "1970-01-01 00:00:00 {} seconds"  </tmp/timestamps

0 pour la réponse № 8

Cette simple commande fera

 cat time.txt | while read line; do date -ud @$line; done > string.txt

0 pour la réponse № 9

Sans oublier que localtime () peut être utilisé à la place de gmtime () en Perl

Donc, si vous n'êtes pas à Greenwich en hiver, vous pouvez utiliser l'heure locale (), par exemple

Code Perl:

    my $unixtime = 1417014507;
my $humantime = localtime($unixtime);
print "$humantime = $humantime n";

sortie:

    $humantime = Wed Nov 26 15:08:27 2014