私はRedhat Linux Server 8.8でこのコマンドを直接使用しており、うまく動作し、望ましい結果を得ます。
grep '01-FEB-2024' /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }'
Bashファイルを使用してこのプロセスを自動化する必要があり、current_date変数の値を取得できないようです。
#!/bin/bash
current_date=$(date "+%d-%b-%Y")
grep '$current_date' /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
grep "$current_date" /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
grep $current_date /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
これらすべての場合はnullを返します。よろしくお願いします。
ベストアンサー1
date +%d-%b-%Y
日付を0から長さ2までパディングし、年を0から4桁までパディングして現在の日付を出力します。
コマンドを実行する人によっては、次のような結果が得られます。
06-فبر-2024
06-лют-2024
06-fév-2024
C/POSIX ロケールでは、次のようになります。
$ LC_ALL=C date +%d-%b-%Y
06-Feb-2024
ログには同じ内容が含まれていますが、大文字のようです。
ここでは、次のことができます。
#! /bin/sh -
TODAY=$(LC_ALL=C date +%d-%b-%Y) exec awk '
BEGIN{today = toupper(ENVIRON["TODAY"])}
index($0, today) && $NF != 0
' /u01/app/server1/listener_scan/trace/listener_scan.log
mawk
、busyboxはこの情報を独自に取得できるawk
ため、gawk
Linuxベースのシステムでも機能する可能性が高くなります。
#! /bin/sh -
LC_ALL=C exec awk '
BEGIN {today = toupper(strftime("%d-%b-%F"))}
index($0, today) && $NF != 0
' /u01/app/server1/listener_scan/trace/listener_scan.log
(これはログファイルの内容がテキストにデコードされる方法にも影響しますが、おそらく最善です。これはエラーメッセージの言語にも影響します。)