awk は便利です。今更ですが。
sed をもっと高機能にしたものとも言えますが、実際はデータの置き換えというよりも、データの抽出、整形に特化しているコマンドだと思います。
ファイルを順に読んでいき処理をしてくれるわけですが、基本的な使い方は以下の通り。
awk '条件{処理}' filename条件には、処理対象とする行の条件を指定します。処理は文字通り、処理です。print $1 等と指定すれば処理対象の1列目のデータを表示します。
スクリプト内で、$1 等を変数として使いたい場合は、以下のようにします。
[OK]-v オプションで NUM という awk 内の変数に、シェルスクリプト内の変数を代入して、awk 内の変数 NUM として使います。
# cat a.txt
abc 0 1 2
def 0 1 2
ghi 0 1 2
jkl 0 1 2
NUM="1"
awk -v NUM=${NUM} '{print $NUM}' a.txt
実行結果
abc
def
ghi
jkl
以下のような指定では、思った結果は得られません。NUM は"$1"という文字列が代入された awk 内の変数として扱われ、$1 が結果として表示されてしまいます。
[NG]
# cat a.txt
abc 0 1 2
def 0 1 2
ghi 0 1 2
jkl 0 1 2
NUM="$1"
awk -v NUM=${NUM} '{print NUM}' a.txt
実行結果
$1
$1
$1
$1
0 件のコメント:
コメントを投稿