LoginSignup
27
22

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-02-02

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

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

27
22
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
22