Edited at

CSVファイルからノイズ行を除去したいときに役たつawkワンライナー

More than 3 years have passed since last update.

CSVと聞いて憂鬱になるのはぼくだけだろうか。

でもそんな憂鬱な事もやらなくてはいけない時がある。

そんな憂鬱な時にぼくはawkでゴニョゴニョしてしまう。

そんなときのワンライナーメモ


CSVのヘッダー行を除外したい

CSVデータ例として


hoge.csv

COLUMN1,COLUMN2,COLUMN3

1,hoge,1
2,fuga,1
3,test,2

データ行だけ抽出したい時はこう書く


/path/to/hoge

cat hoge.csv | awk 'NR > 1 {print}'

# ヘッダーを除外できる
1,hoge,1
2,fuga,1
3,test,2



CSVのフッター行を除外したい

CSVデータ例として


hoge.csv

1,hoge,1

2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3


/path/to/hoge

cat hoge.csv | sed -e '$d'

# ヘッダーを除外できる
1,hoge,1
2,fuga,1
3,test,2



CSVのヘッダー行とフッター行を除外する

ヘッダとフッタが存在するCSVを処理したい場合は上記2つの例をパイプで渡す


hoge.csv

COLUMN1,COLUMN2,COLUMN3

1,hoge,1
2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3


/path/to/hoge

cat hoge.csv | sed -e '$d' | awk 'NR > 1 {print}'

#ヘッダとフッタを除外できる
1,hoge,1
2,fuga,1
3,test,2



CSVのとあるカラムがtestという文字列が含まれている場合は除外する


hoge.csv

COLUMN1,COLUMN2,COLUMN3

1,hoge,1
2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3

ここからCOLLUMN2がtestという文字列が含まれているデータが入っている行だけ除外したい場合


/path/to/hoge

cat hoge.csv | awk -F , '{if ($2 !~/test/) print}'

COLLUMN1,COLUMN2,COLLUMN3
1,hoge,1
2,fuga,1
FOOTER1,FOOTER2, FOOTER3


CSVのとあるカラムの文字数が3桁以下の場合は除外する


hoge.csv

COLUMN1,COLUMN2,COLUMN3

1,123,1 #この行を除外したい
2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3

length(列番号)でいける


/path/to/hoge

cat hoge.csv | awk -F , '{if (length($2) > 3) print}'

COLLUMN1,COLUMN2,COLLUMN3
2,fuga,1
3,test,2
FOOTER1,FOOTER2, FOOTER3


空白行を除外する


hoge.csv

COLLUMN1,COLUMN2,COLLUMN3

1,123,1
2,fuga,1

3,test,2
FOOTER1,FOOTER2, FOOTER3



/path/to/hoge

cat hoge.csv | awk -F , '{if (length($0) > 0) print}'                                                                                                kurumomi-configuration-management/git/master

COLLUMN1,COLUMN2,COLLUMN3
1,123,1
2,fuga,1
3,test,2
FOOTER1,FOOTER2, FOOTER3


先頭が空白文字列で始まっているものを除外する


hoge.csv

COLLUMN1,COLUMN2,COLLUMN3

1,123,1
2,fuga,1 #先頭行が空白から始まっている
3,test,2
FOOTER1,FOOTER2, FOOTER3


/path/to/hoge

cat hoge.csv | awk -F , '{if ( $0 !~/^ / ) print }'

COLLUMN1,COLUMN2,COLLUMN3
1,123,1
3,test,2
FOOTER1,FOOTER2, FOOTER3

ココらへんを上手く組み合わせてワンライナー芸人目指します!!!