Diary

Diary

日々学んだことをアウトプットする場として初めてみました

awk 1 とは何か

awk 1という表現についてメモしておきます。

awk

大前提として、awkの基本パターンは『(マッチ)パターン+アクション』です。

そして awk では以下のように記述します

# awk 'pattern {action}'
$ echo 'hoge fuga pien' | awk '/fuga/ {print $0}'
hoge fuga pien

どちらか一方の省略

実は「パターン」or「アクション」はどちらか一方を省略することができます。

パターンが省略された場合

パターンが省略された場合、全ての行に対してアクションが行われます。

$ echo -e 'hoge fuga pien\npoe ho'
hoge fuga pien
poe ho

$ echo -e 'hoge fuga pien\npoe ho' | awk '{print $1}'
hoge
poe

アクションが省略された場合

アクションが省略された場合、{print $0}と同等のアクションが行われます。

$ echo -e 'hoge fuga pien\npoe ho'
hoge fuga pien
poe ho

# awk '/fuga/ {print $0}' と同等
$ echo -e 'hoge fuga pien\npoe ho' | awk '/fuga/'
hoge fuga pien

awk 1

以上awkの基本的性質を押さえておくと、awk 1という表現の意味が見えてきます。

この表現は、アクションが省略されたものであるり、また、パターンが『1』であることが分かります。

よって、awk 1 とは全ての入力行に対し{print $0}を行うものとなります。

これにより最終行に改行を入れることなどができます。

# 行末に改行がない
xx@yy:~$ echo -en 'hoge'
hogexx@yy:~$

xx@yy:~$ echo -en 'hoge' | awk 1
hoge
xx@yy:~$

なお、awk では 0 より大きな値は真の判定がなされるため、awk 3などでも同様の効果があります。

# 0 より大きな値
xx@yy:~$ echo -en 'hoge' | awk 3
hoge
xx@yy:~$

おわりに

今回は、ぱっと見で何をしているのかわからなかった awk コマンドについて記載してみました。

次やるときに迷わないようしたいです!