LoginSignup
8
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に興味を持たれたら、
便利だと思うので一度使ってみてください。

8
1
0

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
  3. You can use dark theme
What you can do with signing up
8
1