裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

AWK を馬鹿にしちゃいけない

2020年12月19日 | ブログラミング

100000行1500変数のファイルから,第一列<=40,第二列>=60,第三列>=70 の条件を満たす行を抽出する。

tidyverse:::read_csv    ...    遅い,遅すぎる

library(tidyverse)

system.time({
df <- read_csv("test.csv")

df <- df %>%
  filter(X1 <= 40)%>% # X1 <= 40 の行を取り出す
  filter(X2 >= 60) %>% # X2 >= 60 の行を取り出す
  filter(X3 >= 70) # X3 >= 70 の行を取り出す

write_csv(df, "out.csv")
})

   ユーザ   システム       経過  
    39.960      1.574     42.804 

AWK で以下のスクリプト

BEGIN{
FS = ","
getline
print $0
}

$1 <= 40 && $2 >= 60 && $3 >= 70 

実行

$ time awk -f awk1.awk test.csv > out2.csv
0.571u 0.177s 0:00.75 98.6% 0+0k 0+0io 0pf+0w

AWK の方が,39.960 / 0.571 ≒ 70 倍速いです。

そりゃねえ,read_csv は,4列目から1500列目までの入力を文字列で入力して double で格納してるんだから,無理もないワ

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 誤解しないで欲しいんだが | トップ | Python 3 で,ベクトル・配列... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事