awkの-Fオプションは王道の基本オプションだと思います。
用途によって区切り文字を指定して、特定の列を抽出していくと思うのですが、そのサンプルコードをご紹介したいと思います。
スポンサーリンク
-Fオプションで区切り文字を"スペース"に指定する方法
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
awkのデフォルトの区切り文字はスペースなので、-Fオプションを指定する必要はありません。
例えば、下記のようにスペース区切りでファイルがあった場合
$ cat in.txt 20 45 awk 67 32 delimiter 78 56 row
下記のように-Fオプションをつけなくても、スペース区切りで分割されます。
$ cat in.txt | awk '{print $3}'
実行すると、下記のように3列目がprint出力されています。
$ cat in.txt | awk '{print $3}' awk delimiter row
もちろん明示的にスペース区切りであることを残して、-Fオプションで指定するのもOKだと思います。
下記のように、-Fオプションでスペースを指定します。実行結果は先述の結果と同じになっているのが確認できます。
$ cat in.txt | awk -F " " '{print $3}' awk delimiter row
スポンサーリンク
-Fオプションで区切り文字を"タブ(tab)"に指定する方法
タブ区切りにするには、-F "\t" を指定します。
例えば、下記のようにタブ区切りのファイルがあったとします。
$ cat in2.txt 20 45 awk 67 32 delimiter 78 56 trow
ワンライナーで、awkコマンドに-F "\t"でタブ区切りを指定して、2列目をprint出力しています。
$ cat in2.txt | awk -F "\t" '{print $2}' 45 32 56
-Fオプションで区切り文字を"カンマ"に指定する方法-"csvファイル"を入力にする場合-
csvファイルなどカンマ区切りとなっている場合も、同じようにawkコマンドの-Fオプションでカンマを指定します。
下記のようにカンマ区切りのファイルがあった場合、
$ cat in3.txt 20,45,awk 67,32,delimiter 78,56,row
下記のように-Fオプションでカンマを指定します。
2列目がprint出力されているのが確認できます。
$ cat in3.txt | awk -F "," '{print $2}' 45 32 56
スポンサーリンク
-Fオプションで区切り文字を"#"に指定する方法
#区切りの場合もサンプルコードをご紹介します。
下記のように#区切りのファイルがあったとします。
$ cat in4.txt 20#45#awk 67#32#delimiter 78#56#row
下記のように、-Fオプションで#を指定します。
今度は1列目をprint出力しています。
$ cat in4.txt | awk -F "#" '{print $1}' 20 67 78
-Fオプションで区切り文字を"複数"指定する方法
awkで区切り文字が複数あった場合には、-F "[区切り文字]"と指定して、
[]で囲まれた区切り文字の部分に、区切り文字を羅列します。
例えば、カンマと#を区切り文字として下記のようなファイルがあったとします。
$ cat in5.txt 20,45#awk 56,32#delimiter 78,56#row
カンマと#の両方でファイルの列を分割するには、下記のように書きます。
$ cat in5.txt |awk -F "[,#]" '{print $3}'
実行すると、3列目が抽出されてprint出力されているのが確認できます。
$ cat in5.txt |awk -F "[,#]" '{print $3}' awk delimiter row
動画で解説
YouTube始めました!動画で解説しています。
一連の流れを動画にしてみました。
コマンドの書き方や実行結果の動きが確認できます。
よければご参考にして頂けると幸いです。
スポンサーリンク