😀

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

2022/11/28に公開

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