私は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
(これはログファイルの内容がテキストにデコードされる方法にも影響しますが、おそらく最善です。これはエラーメッセージの言語にも影響します。)
答え2
私は何をしますか:
#!/bin/bash
current_date=$(date "+%d-%b-%Y")
grep -i "$current_date" /u01/app/server1/listener_scan/trace/listener_scan.log |
awk '{ if ( $NF != 0 ) print $0 }' >> y.out
シェルから正しく引用する方法を学ぶことは非常に重要です。
スペース/メタ文字を含むすべてのリテラルは「二重引用符」として扱われます。すべて拡張:
"$var"
、、、、。"$(command "$var")"
コードやテキストについてはを参照してください。"${array[@]}"
"a & b"
'single quotes'
$'s: 'Costs $5 US'
ssh host 'echo "$HOSTNAME"'
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
https://web.archive.org/web/20230224010517/https://wiki.bash-hackers.org/syntax/words
いつ二重引用符が必要ですか?
答え3
コマンドが返す06-FEB-2024
コメントに記載されているように、同じパターンを一致させる必要があります。date
06-Feb-2024
変数を大文字で表示できます。
current_date=$(LC_ALL=C date "+%d-%b-%Y")
grep "${current_date^^}" /u01/app/server1/listener_scan/trace/listener_scan.log |
awk '{ if ( $NF != 0 ) print $0 }' >> y.out
次のように組み合わせを組み合わせることもできます。
awk -v date="$(LC_ALL=C date +'%d-%b-%Y')" '$0 ~ toupper(date) && $NF!=0' /u01/app/server1/listener_scan/trace/listener_scan.log >>y.out