0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linuxコマンド: awk

awk は、テキスト処理やデータ解析に特化した強力なコマンドラインツールです。主に、パターンマッチングやフィールド単位でのデータ操作に使用されます。


基本構文

awk 'パターン { アクション }' ファイル名
  • パターン: 処理対象となる行を指定する条件。
  • アクション: 条件に一致する行に対して実行する操作。
  • ファイル名: 処理対象のテキストファイル。

標準入力との組み合わせ

awkは標準入力からデータを受け取ることもできます。

cat ファイル名 | awk 'パターン { アクション }'

基本の使用例

1. ファイルのすべての行を表示

awk '{ print }' ファイル名

出力: ファイルのすべての内容をそのまま出力します。

2. 特定の列(フィールド)を抽出

awkは、スペースやタブで区切られた列を「フィールド」として認識します。

awk '{ print $1 }' ファイル名

出力: 各行の最初のフィールドを出力します。

  • $1: 最初のフィールド
  • $2: 2番目のフィールド
  • $0: 行全体

3. 特定の条件に一致する行を表示

awk '$3 > 100 { print }' ファイル名

出力: 3番目のフィールドが100より大きい行を出力します。


オプション

-F (フィールド区切り文字の指定)

フィールド区切り文字を指定します。デフォルトはスペースやタブです。

使用例: カンマ区切りファイルの処理

awk -F"," '{ print $2 }' ファイル名

例:
以下のようなデータが格納されたファイルがあるとします。

tarou,tanaka,satou
suzuki,tamagawa,oya

コマンドを実行すると、2番目のフィールドが出力されます。

入力:

awk -F"," '{ print $2 }' データファイル名

出力:

tanaka
tamagawa

-v (変数の指定)

awkスクリプト内で使用する変数をコマンドラインで指定できます。

使用例: 変数の使用

awk -v threshold=100 '$3 > threshold { print $0 }' ファイル名

出力: 3番目のフィールドが100より大きい行を出力します。

応用例: 動的な閾値の計算

以下のようなファイルがあるとします。

A,50
B,150
C,120

コマンド:

awk -F"," -v threshold=100 '$2 > threshold { print $1 }' データファイル名

出力:

B
C

-f (スクリプトファイルの使用)

awkスクリプトを外部ファイルとして保存し、そのファイルを指定して実行できます。

使用例: スクリプトファイルの実行

awk -f script.awk ファイル名

-W (警告や動作モードの指定)

awkの動作モードや警告レベルを指定します。

使用例: 非標準拡張の警告を有効化

awk -W lint '{ print $1 }' ファイル名

よく使われるパターンとアクション

1. 行番号を付与

awk '{ print NR, $0 }' ファイル名

出力: 各行の先頭に行番号を追加します。

  • NR: 現在の行番号

2. 合計値を計算

awk '{ sum += $3 } END { print sum }' ファイル名

出力: 3番目のフィールドの合計を出力します。

  • END: 入力処理が終了した後に実行されるアクション。

3. 平均値を計算

awk '{ sum += $3; count++ } END { print sum / count }' ファイル名

出力: 3番目のフィールドの平均値を出力します。

4. 特定の文字列を含む行を抽出

awk '/エラー/ { print }' ファイル名

出力: "エラー"という文字列を含む行を出力します。

5. 列の並び替え

awk '{ print $2, $1 }' ファイル名

出力: 1列目と2列目の順序を入れ替えます。


条件演算子

awkではさまざまな条件演算子を使用できます。

  • ==: 等しい
  • !=: 等しくない
  • >: 大きい
  • <: 小さい
  • >=: 以上
  • <=: 以下

使用例

awk '$2 == "成功" { print }' ファイル名

出力: 2番目のフィールドが"成功"と等しい行を出力します。


応用例

1. ユーザーリストの表示(/etc/passwdファイル)

awk -F":" '{ print $1 }' /etc/passwd

出力: ユーザー名をリスト表示します。

2. スペース区切りのデータをCSV形式に変換

awk '{ print $1 "," $2 "," $3 }' ファイル名

出力: 各行をカンマ区切り形式で出力します。

3. 最大値の計算

awk 'max < $3 { max = $3 } END { print max }' ファイル名

出力: 3番目のフィールドの最大値を出力します。

4. ファイルのヘッダー行を無視

awk 'NR > 1 { print $0 }' ファイル名

出力: 2行目以降を出力します。

5. フィールドを条件に応じて加工

awk '$2 == "OK" { $3 = "Success"; print $0 }' ファイル名

出力: 2番目のフィールドが"OK"の場合、3番目のフィールドを"Success"に変更して行全体を出力します。


0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?