Unix全般 -> awk

awk内で変数を使う

例1

/etc/passwd ファイルから コロン区切り(:)セパレータの
第一フィールドが ftp のものを抽出する。
$ awk -F: '$1=="ftp" {print}' /etc/passwd
ftp:x:113:65534::/home/ftp:/bin/false
$


変数を使用する場合
$ USER=ftp
$ awk -F: "\$1==\"${USER}\" {print}" /etc/passwd
ftp:x:113:65534::/home/ftp:/bin/false
$
変数を使用する場合はダブルクォート(")を使用する。
awk外側をダブルクォート(")で囲っているので内部のダブルクォート(")は
エスケープする(\")。
awk内のフィールド $1 は \$1 と \ でエスケープしなくてはいない。


さらにコマンドの結果を変数に入れる場合
GET_USER=`awk -F: "\\$1==\"${USER}\" {print}" /etc/passwd`
バックスラッシュで囲むのでさらに \ を付けて $1を \\$1 とする。


ついでに、バックスラッシュをダブルクォート(")で囲む場合 
GET_USER="`awk -F: \"\\\$1==\\"${USER}\\" {print}\" /etc/passwd`"
\\\$ になる。
内部の変数をエスケープするダブルクォート(")も \\" と2つでエスケープする。

例2

ファイルの全行の先頭カラムに日付と時間を挿入する

DATE=`date +%Y-%m-%d`
TIME=`date +%H:%M:%S`

awk "{print \"${DATE}\",\"${TIME}\",\$1,\$2,\$3}" log.file > log_edit.file


フィールド数が多い場合 forを使用する。
awk "{printf \"%s %s \",\"${DATE}\",\"${TIME}\"}
     {for(i=1;i<=10;i++)
     {printf \"%s \",\$i}
     {print \"\"}}" log.file > log_edit.file

forの前に 日付と時間を出力。行の途中なので、改行を入れない printfを使用。
フィールド1〜10までを出力。各フィールドは $i となる。
エスケープするので \$i 。行の途中なので、改行を入れない printfを使用。
for終了後に 改行する為 print文で ""を出力する。

      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google