どうも、nippaです。
テキスト処理で手っ取り早く処理するために、awkを使ってみたいと思います。
環境
OS: MacOSX 10.14 (Mojava)
awk version 20070501
1. サンプルデータ
sample.csvとファイルに、以下を書き込んでください。
2020/1/1 1:00:00, 11, 21 2020/1/2 2:00:00, 12, 22 2020/1/3 3:00:00, 13, 23 2020/1/4 4:00:00, 14, 24 2020/1/5 5:00:00, 15, 25
2. データの出力
- 入力値をすべて出力
awk '{print $0}' sample.csv #結果 2020/1/1 1:00:00, 11, 21 2020/1/2 2:00:00, 12, 22 2020/1/3 3:00:00, 13, 23 2020/1/4 4:00:00, 14, 24 2020/1/5 5:00:00, 15, 25
- 列を指定して出力
デフォルトの入力ファイルの区切り文字は半角スペースになっています。
# 1列目の出力 awk '{print $1}' sample.csv 2020/1/1 2020/1/2 2020/1/3 2020/1/4 2020/1/5
# 2、3列目の出力 awk '{print $2, $3}' sample.csv 1:00:00, 11, 2:00:00, 12, 3:00:00, 13, 4:00:00, 14, 5:00:00, 15,
,
で出力列を分けると、区切り文字ありで出力されます。
デフォルトの出力の区切り文字は半角スペースです。
- 最終列を指定して出力
awk '{print $NF}' sample.csv 1:00:00, 11, 2:00:00, 12, 3:00:00, 13, 4:00:00, 14, 5:00:00, 15,
- 最終列から3つ手前の列(最初の列)を出力
awk '{print $(NF-3)}' sample.csv 2020/1/1 2020/1/2 2020/1/3 2020/1/4 2020/1/5
3. 入力データの区切りの指定
区切り文字は-F"[区切り文字]"
で指定できます。
# 区切り文字(カンマ) awk -F"," '{print $1}' sample.csv 2020/1/1 1:00:00 2020/1/2 2:00:00 2020/1/3 3:00:00 2020/1/4 4:00:00 2020/1/5 5:00:00 # 区切り文字(コロン) awk -F":" '{print $1}' sample.csv 2020/1/1 1 2020/1/2 2 2020/1/3 3 2020/1/4 4 2020/1/5 5 # 区切り文字(スラッシュ) awk -F"/" '{print $1}' sample.csv 2020 2020 2020 2020 2020
awk内部のコマンドとして、区切り文字を指定することもできます。
# 区切り文字(カンマ) awk '{FS=","}{print $1}' sample.csv 2020/1/1 1:00:00 2020/1/2 2:00:00 2020/1/3 3:00:00 2020/1/4 4:00:00 2020/1/5 5:00:00
4. 出力データの区切りの指定
OFS(output field separator)変数に値を与えて指定します。デフォルト値はBlank
になります。
# 区切り文字(aaa) awk 'BEGIN{OFS="aaa"}{print $1, $2}' sample.csv 2020/1/1aaa1:00:00, 2020/1/2aaa2:00:00, 2020/1/3aaa3:00:00, 2020/1/4aaa4:00:00, 2020/1/5aaa5:00:00,
区切り文字を複数指定することもできます。
# 区切り文字(コロンまたはスラッシュ) awk -F'[:/]' '{print $3,$4}' sample.csv 1 1 00 2 2 00 3 3 00 4 4 00 5 5 00
5. 入出力データの区切りの指定
OFS(output field separator)変数に値を与えて指定します。デフォルト値はBlank
になります。
# 入力の区切り文字(スラッシュ) # 出力の区切り文字(ドット) awk 'BEGIN {FS="/";OFS="."}{print $1, $2, $3}' sample.csv #または、 awk -F"/" -v OFS="." '{print $1, $2, $3}' sample.csv 2020.1.1 1:00:00, 11, 21 2020.1.2 2:00:00, 12, 22 2020.1.3 3:00:00, 13, 23 2020.1.4 4:00:00, 14, 24 2020.1.5 5:00:00, 15, 25
感想
ちょっとしたテキストファイルの処理にawkは非常に便利です。
今回はawkの入出力の区切りを取り上げましたが、今後もう少し処理を勉強していきたいと思います。
ではでは、また次回。