LoginSignup
1

More than 1 year has passed since last update.

はじめに

最近、某大手のジョブスケジュラーの出力CSVを整理するという雑務で、久々にshellScriptとawkでテキスト処理をおこなったので、今更ながら思いながらawkを便利さを語りたい。

awkとは

awkとは、UnixやLinuxでデフォルトで入っていて、ファイル処理用のパターンマッチングに適したユーティリティプログラム。Shellもかけて、sedと組み合わせたら超便利。
行毎のテキストファイルを処理するの適していて、列の入れ替えや加工も余裕です。
GNUの拡張版でパターンマッチングに正規表現が使えるgawkもあります。

UNIX,LINUXで仕事してきたおじさんたちは、まぁ、使えるはず。しらんけど。

awkの実行構文

awkは、1例であるが下記のような実行方法に実行を行う。

-- Scriptを直書き
awk [option] 'Script' input-files
-- Script-fileを指定(拡張子は、awk)
awk [option] -f script-file input-files

あとは、cat等の標準入力を使ったパターンもあるが割愛します。

入力データ

レコードとフィールドに分割され、レコードは行、フィールドは空白文字で区切られます。レコードとフィールドの区切り文字は RS と FS で指定して変更できます。

下記のような空白文字区切りのtxtがあります.
前述がわかるように一例を記載します。

[qiita]
cat hoge.txt
あ い う え お
か きくけこ
たち つ て と

## $0 で行全体
[qiita]
awk '{print $0}' hoge.txt
あ い う え お
か きくけこ
たち つ て と

## $1 $3 でテキストの1列目と3列目を抽出し表示
[qiita]
awk '{print $1 $3}' hoge.txt
あう
か
たちて

Scriptの記載方法

awkのScriptは、パターン(pattern)と処理手順(Procedure)に別れます。

pattern { procedure }

パターンは、省略ができ、省力すると全ての行が処理手順が適用されます

-- 正規表現が指定できます。

[例]
1.正規表現で[あ]から始まる行の1列目、2列目を表示

[qiita]
awk '/^あ/ { print $1 $2 }' hoge.txt
あい
  1. 条件に合致した行を対象とする($1が[あ]の行だけ)
[qiita]
awk '$1 == "あ" {print $0 }' hoge.txt
あ い う え お
  1. BEGIN, END は,、一番最初と一番最後に処理を実行します。
[qiita]
awk '
> BEGIN { print "BEGIN" }
> {print $0 }
> END{ print "END"}
> ' hoge.txt
BEGIN
あ い う え お
か きくけこ
たち つ て と
END

まとめ

ちょっと長くなってきので終わりにします
まだまだ組み込み変数や演算子やら関数がありますが、awkに興味を持たれたら、
便利だと思うので一度使ってみてください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1