テキストファイルに保存されている新起源の時間形式を人間に優しい形式に変換する

テキストファイルに保存されている新起源の時間形式を人間に優しい形式に変換する

日付がエポック時間形式で保存されるファイル名simcloud-target.txtがあり、すべての日付を人間に優しい形式に変換してリストとして印刷したいです(下記のような出力なので、エポックではありませんが必要です)。によってhh:mm:00)

sec504@slingshot:~$ cat simcloud-targets.txt
1679450009
1679450014
1679450018
1679450018
1679450022
1679450023
1679450024
1679450024
1679450033
1679450043
1679450046
1679450060
1679450065
1679450071
sec504@slingshot:~$ 

答え1

ファイルのUnixタイムスタンプの前にプレフィックスが付いている場合は、@GNUをdate使用してそれを読み取ることができます-f。次の@ように、各タイムスタンプにプレフィックスを追加できますsed

sed 's/^/@/' file

...そして、次のようにGNUから出力を使用できますdate

date -f <(sed 's/^/@/' file)

問題の日付スタンプとローカルタイムゾーンを考慮すると、次のようになります。

Wed Mar 22 02:53:29 CET 2023
Wed Mar 22 02:53:34 CET 2023
Wed Mar 22 02:53:38 CET 2023
Wed Mar 22 02:53:38 CET 2023
Wed Mar 22 02:53:42 CET 2023
Wed Mar 22 02:53:43 CET 2023
Wed Mar 22 02:53:44 CET 2023
Wed Mar 22 02:53:44 CET 2023
Wed Mar 22 02:53:53 CET 2023
Wed Mar 22 02:54:03 CET 2023
Wed Mar 22 02:54:06 CET 2023
Wed Mar 22 02:54:20 CET 2023
Wed Mar 22 02:54:25 CET 2023
Wed Mar 22 02:54:31 CET 2023

その後、通常どおりに希望の出力形式を設定できますdate。ここでは、プロセス置換の代わりに通常のパイプを使用する方法も示します。

$ sed 's/^/@/' file | date -f - +'%F %T'
2023-03-22 02:53:29
2023-03-22 02:53:34
2023-03-22 02:53:38
2023-03-22 02:53:38
2023-03-22 02:53:42
2023-03-22 02:53:43
2023-03-22 02:53:44
2023-03-22 02:53:44
2023-03-22 02:53:53
2023-03-22 02:54:03
2023-03-22 02:54:06
2023-03-22 02:54:20
2023-03-22 02:54:25
2023-03-22 02:54:31

strftimeman 3 strftime使用できるプレースホルダの形式については、ライブラリ関数()のマニュアルを参照してください。

答え2

ほとんどすべてが使えるので(g)awkを使うことができます。

awk '1{$1 = strftime("%F %H:%M:%S", $1); print}' < simcloud-targets.txt

結果(私は別のタイムゾーンにあるので):

2023-03-22 02:53:29
2023-03-22 02:53:34
2023-03-22 02:53:38
2023-03-22 02:53:38
2023-03-22 02:53:42

これはタイムスタンプの後に他のエントリ(例えば、イカログファイル)があっても動作し続けるためです。

1679468468.282    223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -

~になる

2023-03-22 08:01:08 223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -

答え3

このように、およびを使用すると、xargs次のようGNU dateになります。

$ xargs < file -I{} date -d '@{}' "+%F %T"

または、次のように* 、、、、、、をbourne使用bashします(ただし、&は使用しません)。dashashyashkshzshshcshfish

$ while read epoch; do date -d "@$epoch" "+%F %T"; done < file

出力

2023-03-22 08:53:29
2023-03-22 08:53:34
2023-03-22 08:53:38
2023-03-22 08:53:38
2023-03-22 08:53:42
2023-03-22 08:53:43
2023-03-22 08:53:44
2023-03-22 08:53:44
2023-03-22 08:53:53
2023-03-22 08:54:03
2023-03-22 08:54:06
2023-03-22 08:54:20
2023-03-22 08:54:25
2023-03-22 08:54:31

そして:

$ perl -nE 'say scalar localtime($_)' file 
Wed Mar 22 08:53:29 2023
Wed Mar 22 08:53:34 2023
Wed Mar 22 08:53:38 2023
Wed Mar 22 08:53:38 2023
Wed Mar 22 08:53:42 2023
Wed Mar 22 08:53:43 2023
Wed Mar 22 08:53:44 2023
Wed Mar 22 08:53:44 2023
Wed Mar 22 08:53:53 2023
Wed Mar 22 08:54:03 2023
Wed Mar 22 08:54:06 2023
Wed Mar 22 08:54:20 2023
Wed Mar 22 08:54:25 2023
Wed Mar 22 08:54:31 2023

関連情報