Help us understand the problem. What is going on with this article?

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

More than 5 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

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

ryurock
認定スクラムマスター 認定プロダクトオーナー http://www.scrumalliance.org/community/profile/rkimura2
https://github.com/ryurock
visasq
ビザスクは「知見と、挑戦をつなぐ」をミッションに、世界で1番のナレッジプラットフォームをつくっています。 様々なニーズにつなぐことで、実際に経験したことで得られた知識や意見を、知見として価値最大化します。組織、世代、地域を超えて、知見を集めつなぐことで、世界中のイノベーションに貢献します。
https://visasq.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away