はじめに
こんにちは!
久々に awk コマンドを使ったので、備忘録としてまとめようと思います。
便利だけど、たまにしか使わないので、よく忘れます。。
awk ってどんなコマンド?
awk は、テキストファイルを読み込んで、指定したパターンにマッチする行に対してアクションを実行するコマンドです。
例えば、「特定の条件に合致する行だけを抽出したい」「ファイルの中身をカンマ区切りで出力したい」といった処理を、簡単に行うことができます。
awk の基本的な使い方
awk の基本的な構文は以下の通りです。
awk 'パターン { アクション }' 入力ファイル
- パターン: 処理対象となる行を指定するための条件を記述します。
- アクション: パターンに合致した行に対して実行する処理を記述します。
- 入力ファイル: 処理対象のテキストファイルを指定します。
パターンとアクションは、それぞれ省略可能です。
パターンを省略した場合: 全ての行に対してアクションが実行されます。
アクションを省略した場合: パターンに合致した行がそのまま出力されます。
簡単な例
例えば、以下のような内容の sample.txt
というテキストファイルがあるとします。
apple,100,red
banana,50,yellow
orange,80,orange
1. 特定の列だけを抽出する
カンマ区切りのファイルから、特定の列だけを抽出したい場合は、 $1
、 $2
のようにフィールド指定を行います。
$1
は1列目、 $2
は2列目を表します。
$ awk -F ',' '{ print $1 }' sample.txt
apple
banana
orange
2. 特定の文字列を含む行だけを抽出する
sample.txt
から、"banana" という文字列を含む行だけを抽出したい場合は、以下のように記述します。
$ awk '/banana/ { print $0 }' sample.txt
banana,50,yellow
/banana/
がパターンに該当し、 print $0
がアクションに該当します。
$0
は行全体を表すので、パターンに合致した行全体が出力されます。
3. 特定の条件に合致する行だけを抽出する
sample.txt
から、2列目の値が 70 より大きい行だけを抽出したい場合は、以下のように記述します。
$ awk -F ',' '$2 > 70 { print $0 }' sample.txt
apple,100,red
orange,80,orange
4. 各行に処理を加えて出力する
sample.txt
の各行に "fruit: " という文字列を先頭に追加して出力したい場合は、以下のように記述します。
$ awk '{ print "fruit: " $0 }' sample.txt
fruit: apple,100,red
fruit: banana,50,yellow
fruit: orange,80,orange
5. 合計値を計算する
sample.txt
の内容について、合計を計算する場合は、以下のように記述します。
$ awk -F ',' '$2 { sum += $2 } END { print sum }' sample.txt
230
6. 特定の条件に合致した合計値を計算する
sample.txt
の内容について、2番目の数値が70より大きい数の合計を計算する場合は、以下のように記述します。
$ awk -F ',' '$2 > 70 { sum += $2 } END { print sum }' sample.txt
180
まとめ
今回は awk コマンドの基本的な使い方について、復習を兼ねてまとめてみました。
awk は、一見すると難しそうに見えますが、基本的な使い方さえ押さえておけば、非常に強力なテキスト処理ツールとして活用できます。
この備忘録が、(私を含めて)awk を久しぶりに使う方の助けになれば幸いです。