
Ubuntuサーバーで
次のように、webサーバーのログから、アクセス時間部分を取り出しまた。
grep -F " " /var/log/apache2/access.log | awk '{print $4}' | cut -b 14,15,17,18,20,21
さらに、ある時間以降のログを取り出すために
grep -F " " /var/log/apache2/access.log | awk '{print $4}' | cut -b 14,15,17,18,20,21 | awk '$1>"201030"'
で、20時10分30秒以降のアクセス時間を取り出すことができます。
しかし、比較すべき時間を変数にすると、正しく抽出されません。
変数をTMPTIMEとすると
awk '$1>$TMPTIME'
ではダメでした。
${TMPTIME}
としてもダメです。
""で囲まれていないのでダメなのかと思い、変数に""を連結して、"変数"としてもダメでした。
どこがいけないのでしょうか。
よろしくご教示ください。
No.1ベストアンサー
- 回答日時:
シェルの変数展開の仕組と、awkの文法について、勉強しましょう。
その TMPTIME 変数は、シェルの変数ですか?awk内の変数ですか?その区別がついてない状態ですか?
コマンドを入力すると、$変数名 といった部分は、先に展開され、その結果がコマンドへ送られます。
DIRNAME='X'
ls $DIRNAME
みたいにした場合、
lsコマンドが $DIRNAME の内容を解釈するのではなく、シェルが先に
ls X
に置き換えています。 ls コマンドは、単に X という引数を受けるだけです。
もとが DIRNAMEという変数だったことはわかりません。
シングルクオートには、この変数展開をしない、という機能があります。
awk '$1>$TMPTIME'
というのは、シングルクオートにより変換はされずawkに
$1>$TMPTIME
という文字列を渡します。
これをawkが解釈するので、 $1 は 1つめのフィールドを表わしますが、 $TMPTIME はそのままです。
${TMPTIME} でも "$TMPFILE" でも同じです。awkにそのまま送られて、awk側で解釈しようとします。
方法の一つは TMPFILEの内容を反映させた文字列をawkへ送ることです。
set -x
を実行すると、以降は、シェルが展開した後の実際に実行するコマンドが出力されるようになります。
それで、awk に $1>"201030" というような感じで渡せるようにしましょう。
全体をダブルクオートにして、そのまま$やダブルクオートにしたい部分を\でエスケープします。
もう一つの方法は、awkの変数として定義することです。
awkの変数を実行時に定義する方法は、マニュアルや解説サイトを見ましょう。
kmee様、ありがとうございました。
ご教示いただいた内容に従い、awk内でシェルの変数を渡せるように定義し
正しく動作させることができました。実際の内容は
awk --assign にて定義しました。
改めて、再確認すべき点が多いことを認識いたしました。
今後ともよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) テキストデータ変換(プログラミング、linux、python) 8 2023/08/08 16:39
- その他(プログラミング・Web制作) awkの正規表現での最左最短マッチング 3 2022/07/01 00:10
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- その他(プログラミング・Web制作) awkの BEGIN{RS=""} で空行を削除できるが、削除できる仕組みが分からない。 1 2023/05/02 14:14
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- UNIX・Linux gawk 3 2022/08/18 14:07
- 教えて!goo このサイトで専門用語で質問して専門用語が分かる回答者を期待したが回答が得られない その例として例えば 4 2023/05/06 22:29
- その他(教育・科学・学問) エクセル関数について 2 2022/12/23 08:59
- 数学 複素数についての質問です。 1+iの主値を求める問題で回答が以下のようになっていました。 1+i = 5 2022/07/22 04:04
- その他(プログラミング・Web制作) awkの$NR 2 2022/10/24 11:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
CSVファイルの複数行削除
-
数学、プログラミング、物理、...
-
pip --versionがエラーになる
-
Python 3.12.2 か一番最新のパ...
-
画像生成AIのプロンプトの作り...
-
pythonの実行に関する質問
-
OS入ってる機器のソフト・アプ...
-
パイソンのソースコードをChatG...
-
Python... 環境設定 初心者です...
-
ネットワークフォルダの中身を...
-
ExcelVBAでFormulaR1C1を列範囲...
-
アセンブリ言語について。
-
コトリン言語について。
-
テキストファイルの1行目のみを...
-
MacのPythonでの開発について
-
そのまま使っただけなのに・・...
-
Pythonについて。
-
iOSゲームアプリが作りたいと思...
-
MOVEコマンドでサブフォルダー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
CSVファイルの複数行削除
-
OS入ってる機器のソフト・アプ...
-
Python 3.12.2 か一番最新のパ...
-
pythonの実行に関する質問
-
パイソンのソースコードをChatG...
-
画像生成AIのプロンプトの作り...
-
数学、プログラミング、物理、...
-
pip --versionがエラーになる
-
Google ColaboでGUI作成
-
Python... 環境設定 初心者です...
-
HTMLソースが表示のページのも...
-
ネットワークフォルダの中身を...
-
MOVEコマンドでサブフォルダー...
-
google Colabでmatplotlibの描...
-
VBAでパワーシェルを実行したい...
-
Pythonでの文字列からfloatへの...
-
Webサイト内に埋め込んだmp4動...
-
初心者powershellのPS1ファイル...
-
pythonについて(初心者です)
おすすめ情報