😀
CSVファイルからノイズ行を除去したいときに役たつawkワンライナー
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
空白行を除外する
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
先頭が空白文字列で始まっているものを除外する
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
ココらへんを上手く組み合わせてワンライナー芸人目指します!!!
Discussion