日付がエポック時間形式で保存されるファイル名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
strftime
man 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
します(ただし、&は使用しません)。dash
ash
yash
ksh
zsh
sh
csh
fish
$ 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