スペースで区切られたログの後ろから2番目の値を取得するシェルスクリプト
概要
わけあって必要になったので自分がコピペする用のメモ。
スペースで区切られたログの後ろから2番目の値を取得する処理をシェルスクリプトで書く。
汎用的に言い換えると、「ログの1行を○○の文字で分割して、分割した後ろから○○番目の文字列を取得する」。
環境:
bash
やりたいこと
・とあるミドルウェアが出力するログファイルで、スペースで区切って後ろから2番目の文字列を取得したい。
・高級言語は使えない環境だったのでbashで書く。
・対象のログファイルは圧縮されたgzファイルで、同一フォルダに大量にある前提。
→なのでファイル指定はコマンドライン引数でワイルドカードを使って実現することにした。
・1つ1つのファイルが大きいかったのでreadコマンドを使ってみた。
スクリプトのコード
(補足) gzファイルのログが前提なので、
macの場合はgzcat、linuxの場合はzcatコマンドを使うけど
プレーンテキストを読むのならcatで。
#!/bin/bash #コマンドライン引数で指定されたファイルの数だけループ for arg in "$@" do #圧縮ファイルを解凍して1行ごと処理 gzcat $arg | while read str do #スペースで分割して配列に格納 array=(`echo $str | tr -s ' ' '\n'`) #配列の後ろから2番目の要素番号を取得 index=$((${#array[@]}-2)) echo ${array[$index]} done done