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?

AWK覚え書き

Last updated at Posted at 2025-02-02

はじめに

最近AWKを使って他のコマンドの出力を加工することが多いため、使い方を覚えておくために記事として残しておきたいと思います。
s

AWKとは

  • LinuxやMacで使用可能なコマンド(プログラミング言語)
  • 入力として与えたテキストを加工して出力できる

コマンド例

例えば次のようなCSVファイルを想定します。

sample.csv
id,price
0,100
1,10
2,200
3,150
4,100

CSVファイルの特定の列だけを切り出して表示することや

コマンド
cat sample.csv | awk -F'[,]' '{print $2}'
出力
price
100
10
200
150
100

列の合計を計算することができます。

コマンド
cat sample.csv| awk -F'[,]' 'NR>1{sum += $2} END {print sum}'
出力
560

よく使用するコマンド

空白区切りでn列目を表示

  • $0で入力行全体、$1~で入力を空白区切りにした場合の1列目、2列目、・・・を表示します
{任意のコマンド} | awk '{print $2}'

任意の区切り文字でn行目を表示

  • -Fの直後に区切り文字にしたい文字を設定します
  • 区切り文字は2文字以上でも設定可能です
  • 組み込み変数であるFSを使用しても区切り文字を変更することができます
# "="を区切り文字として2列目を表示
{任意のコマンド} | awk -F= '{print $2}' # -Fオプションを使用する場合
{任意のコマンド} | awk -v FS="=" '{print $2}' # 組み込み変数を使用する場合

先頭行を除いた残りの行を表示

  • コマンドやファイルからヘッダ行を取り除きたい場合に使用します
  • NRはビルトイン変数であり、現在行のレコード番号を表します
{任意のコマンド} | awk 'NR>1{print $0}'

n行目のみを表示

  • 指定した行のみを取り出したい場合に使用します
  • 行指定よりgrepで絞り込んでしまうことが多いのであまり使わないかも
# 2行目だけを表示する場合
{任意のコマンド} | awk 'NR==2{print $0}'

最終行のみを表示

  • 最後に必要な情報(集計結果など)がある場合に、その行だけ取り出したい場合などに使用します
  • ENDを使用することで最後の行でのみ処理が実行されます
  • tailと組み合わせても同じことができます
{任意のコマンド} | awk 'END{print $0}'

四則演算

  • 出力に対して加減乗除などの演算子が使用できます
  • 出力の単位を変換したり、オフセットを加えるなどの用途で使用できます
echo 10 | awk '{print $1 + 1}' # 11
echo 10 | awk '{print $1 - 1}' # 9
echo 10 | awk '{print $1 * 2}' # 20
echo 10 | awk '{print $1 / 2}' # 5

参考文献

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?