
bashコマンドがあります(macOS High Sierraの場合)。
sudo cat /private/var/log/system.log*| awk 'BEGIN {print "\n"} {print "Month\tDay\tTime\t\tSystemMessage"} /SHUTDOWN_TIME/{print $1,$2,$3,$8}'|sort -M|uniq|column -t
出力:
Month Day Time SystemMessage
Mar 30 02:50:56 SHUTDOWN_TIME:
Mar 30 13:13:28 SHUTDOWN_TIME:
Apr 1 17:27:48 SHUTDOWN_TIME:
Apr 1 23:59:37 SHUTDOWN_TIME:
Apr 10 17:08:10 SHUTDOWN_TIME:
Apr 10 22:59:13 SHUTDOWN_TIME:
Apr 11 19:13:43 SHUTDOWN_TIME:
Apr 2 16:33:50 SHUTDOWN_TIME:
Apr 3 00:13:58 SHUTDOWN_TIME:
Apr 3 16:54:22 SHUTDOWN_TIME:
Apr 3 23:36:55 SHUTDOWN_TIME:
Apr 4 17:00:40 SHUTDOWN_TIME:
Apr 5 17:00:50 SHUTDOWN_TIME:
Apr 8 17:41:18 SHUTDOWN_TIME:
Apr 8 23:41:05 SHUTDOWN_TIME:
Apr 9 17:19:33 SHUTDOWN_TIME:
Apr 9 23:23:18 SHUTDOWN_TIME:
他のbashコマンドは次のように設定されていますが:
sudo cat /private/var/log/system.log*| awk 'BEGIN {print "\n"} {print "Month\tDay\tTime\t\tSystemMessage"} /BOOT_TIME/{print $1,$2,$3,$6}'|sort -M|uniq|column -t
出力:
Month Day Time SystemMessage
Mar 30 12:37:12 BOOT_TIME
Apr 1 10:09:12 BOOT_TIME
Apr 1 21:45:41 BOOT_TIME
Apr 10 09:38:12 BOOT_TIME
Apr 10 19:53:06 BOOT_TIME
Apr 11 12:02:02 BOOT_TIME
Apr 12 09:33:21 BOOT_TIME
Apr 2 10:19:19 BOOT_TIME
Apr 2 22:54:34 BOOT_TIME
Apr 3 09:56:02 BOOT_TIME
Apr 3 21:09:25 BOOT_TIME
Apr 4 10:00:42 BOOT_TIME
Apr 5 10:09:17 BOOT_TIME
Apr 8 09:47:02 BOOT_TIME
Apr 8 21:21:34 BOOT_TIME
Apr 9 09:34:50 BOOT_TIME
Apr 9 21:16:49 BOOT_TIME
これら2つのコマンドを組み合わせて次の出力を生成する最良の方法は何ですか?
Month Day Time SystemMessage
Mar 30 12:37:12 BOOT_TIME
Mar 30 02:50:56 SHUTDOWN_TIME
最初のコマンドの出力には、各行の末尾に「:」があります。出力からそれらを削除するにはどうすればよいですか?
答え1
これを組み合わせるには、次のことができます(macOS High Sierraシステムのログにアクセスできず、Mojaveシステムのログメッセージがまったく一致しないためテストされていません)。
cat /private/var/log/system.log | awk '
BEGIN { OFS="\t"; print "Month", "Day", "Time", "Message" }
/SHUTDOWN_TIME/ { sub(":$","",$8); print $1, $2, $3, $8 }
/BOOT_TIME/ { print $1, $2, $3, $6 }'
8番目のフィールドの末尾のsub()
フィールド:
(存在する場合)を削除します。
私はヘッダーを1回だけ印刷しますが、1行に1回だけ印刷します。ログファイルがすでに時間ごとにソートされている可能性があるため、ソートも不要です。
私のmacOS Mojaveシステムでは、他のsystem.log*
ファイルが圧縮されているので、cat
その内容をawk
。zcat
システムの管理者としてsudo
ログを読む必要もありません。
答え2
出力を2つのファイルに保存し、次のコマンドを使用して上記の結果を取得します。
cat file1 file2|sed '/Month/d'| sed "s/:$//g"| sed '1i Month Day Time SystemMessage'
Month Day Time SystemMessage
Mar 30 02:50:56 SHUTDOWN_TIME
Mar 30 13:13:28 SHUTDOWN_TIME
Apr 1 17:27:48 SHUTDOWN_TIME
Apr 1 23:59:37 SHUTDOWN_TIME
Apr 10 17:08:10 SHUTDOWN_TIME
Apr 10 22:59:13 SHUTDOWN_TIME
Apr 11 19:13:43 SHUTDOWN_TIME
Apr 2 16:33:50 SHUTDOWN_TIME
Apr 3 00:13:58 SHUTDOWN_TIME
Apr 3 16:54:22 SHUTDOWN_TIME
Apr 3 23:36:55 SHUTDOWN_TIME
Apr 4 17:00:40 SHUTDOWN_TIME
Apr 5 17:00:50 SHUTDOWN_TIME
Apr 8 17:41:18 SHUTDOWN_TIME
Apr 8 23:41:05 SHUTDOWN_TIME
Apr 9 17:19:33 SHUTDOWN_TIME
Apr 9 23:23:18 SHUTDOWN_TIME
Mar 30 12:37:12 BOOT_TIME
Apr 1 10:09:12 BOOT_TIME
Apr 1 21:45:41 BOOT_TIME
Apr 10 09:38:12 BOOT_TIME
Apr 10 19:53:06 BOOT_TIME
Apr 11 12:02:02 BOOT_TIME
Apr 12 09:33:21 BOOT_TIME
Apr 2 10:19:19 BOOT_TIME
Apr 2 22:54:34 BOOT_TIME
Apr 3 09:56:02 BOOT_TIME
Apr 3 21:09:25 BOOT_TIME
Apr 4 10:00:42 BOOT_TIME
Apr 5 10:09:17 BOOT_TIME
Apr 8 09:47:02 BOOT_TIME
Apr 8 21:21:34 BOOT_TIME
Apr 9 09:34:50 BOOT_TIME
Apr 9 21:16:49 BOOT_TIME