スキップしてメイン コンテンツに移動

投稿

awk で SQL のようにグループごとの件数をカウントする

用いたデータの この記事 をご参考ください。 まず、 DPC_EFn_201404-12.txt というテキストファイルの先頭が 201404 の行数(件数)をカウントする場合、下記のコマンドでできます。 (テキストは370万行なので、かなり時間かかります。) $ awk '$0~/^201404/ {print $1}' DPC_EFn_201404-12.txt | wc -l 【結果】380502 でも、awk のみでカウントしたい場合は、下記でも行けます。 $ awk 'BEGIN {count=0}  $0~/^201404/  {count=count+1} END {print count}' DPC_EFn_201404-12.txt 【結果】 380502 正規表現ではなくカラム1で指定したい場合、 $ awk 'BEGIN {count=0}  $1=="201404"  {count=count+1} END {print count}' DPC_EFn_201404-12.txt 【結果】 380502 さて、SQLの select yyyymm, count(*) from  DPC_EFn_201404-12 group by yyyymm のようにしたい場合、 $ awk 'BEGIN {FS=OFS="\t"}  { if($1 in hash) hash[$1] = hash[$1]+1; else hash[$1]=1} END {for(key in hash) print key,hash[key]}' DPC_EFn_201404-12.txt 【解説】入力ファイルのファイルセパレータ FS と  出力ファイルのファイルセパレータ OFS をTABに指定して、カラム1($1)がハッシュ配列にあれば、その値を+1、ない場合は1をいれます。最後にキーと値のペアを標準出力に出します。 【結果】 201410    435993 201411    391426 201412    403304 201404    380502 2014...

awk で SQL のようにグループごとの件数をカウントする

用いたデータの この記事 をご参考ください。 まず、 DPC_EFn_201404-12.txt というテキストファイルの先頭が 201404 の行数(件数)をカウントする場合、下記のコマンドでできます。 (テキストは370万行なので、かなり時間かかります。) $ awk '$0~/^201404/ {print $1}' DPC_EFn_201404-12.txt | wc -l 【結果】380502 でも、awk のみでカウントしたい場合は、下記でも行けます。 $ awk 'BEGIN {count=0}  $0~/^201404/  {count=count+1} END {print count}' DPC_EFn_201404-12.txt 【結果】 380502 正規表現ではなくカラム1で指定したい場合、 $ awk 'BEGIN {count=0}  $1=="201404"  {count=count+1} END {print count}' DPC_EFn_201404-12.txt 【結果】 380502 さて、SQLの select yyyymm, count(*) from  DPC_EFn_201404-12 group by yyyymm のようにしたい場合、 $ awk 'BEGIN {FS=OFS="\t"}  { if($1 in hash) hash[$1] = hash[$1]+1; else hash[$1]=1} END {for(key in hash) print key,hash[key]}' DPC_EFn_201404-12.txt 【解説】入力ファイルのファイルセパレータ FS と  出力ファイルのファイルセパレータ OFS をTABに指定して、カラム1($1)がハッシュ配列にあれば、その値を+1、ない場合は1をいれます。最後にキーと値のペアを標準出力に出します。 【結果】 201410    435993 201411    391426 201412    403304 201404...

awk で DPC EFファイルの先頭に年月を追加する

ある病院のDPC EFファイルの件数 $ wc -l EFn_000000000_14*.txt   380502 EFn_000000000_1404.txt   390134 EFn_000000000_1405.txt   423224 EFn_000000000_1406.txt   450589 EFn_000000000_1407.txt   429559 EFn_000000000_1408.txt   412329 EFn_000000000_1409.txt   435993 EFn_000000000_1410.txt   391426 EFn_000000000_1411.txt   403304 EFn_000000000_1412.txt  3717060 total 年月を先頭につけて、UTF-8に変換し、1つのファイルに出力する awk '{print "20" substr(FILENAME,15,4) "\t" $0}' EFn_ 000000000 _14* | nkf -x > DPC_EFn_201404-12.txt 【解説】ファイル名の年月はYYMMなので、先頭に"20"を追加します。年月YYMMはファイル名の15文字目から4文字をとります。TAB(" \t ")を挟んで元の行($0)とくっつけます。それから、パイプ | を通して nkf コマンドで 文字コードをUTF-8(-x)に変換してから、 DPC_EFn_201404-12.txt というファイルに出力(>)します。

awk で DPC EFファイルの先頭に年月を追加する

ある病院のDPC EFファイルの件数 $ wc -l EFn_000000000_14*.txt   380502 EFn_000000000_1404.txt   390134 EFn_000000000_1405.txt   423224 EFn_000000000_1406.txt   450589 EFn_000000000_1407.txt   429559 EFn_000000000_1408.txt   412329 EFn_000000000_1409.txt   435993 EFn_000000000_1410.txt   391426 EFn_000000000_1411.txt   403304 EFn_000000000_1412.txt  3717060 total 年月を先頭につけて、UTF-8に変換し、1つのファイルに出力する awk '{print "20" substr(FILENAME,15,4) "\t" $0}' EFn_ 000000000 _14* | nkf -x > DPC_EFn_201404-12.txt 【解説】ファイル名の年月はYYMMなので、先頭に"20"を追加します。年月YYMMはファイル名の15文字目から4文字をとります。TAB(" \t ")を挟んで元の行($0)とくっつけます。それから、パイプ | を通して nkf コマンドで 文字コードをUTF-8(-x)に変換してから、 DPC_EFn_201404-12.txt というファイルに出力(>)します。

ASUS 3000台灣ドル以下の 2 SIMカードのZenFone C を発売!

参考サイト: http://www.ithome.com.tw/news/93881 4.5型の画面とインテル1.2GHz Atom Z2520 デュアルコアのCPU、3G通信、2SIMカード(SIMフリー)、500万画素の PixelMasterカメラを搭載しています。 狙いはスマートフォン入門の客層で、2990台灣ドル(約11000円)の低価格で提供しています。 メモリは1GBで、内蔵のストレージの容量は8GBとなります。 前方のカメラは30万画素で、GPS機能も内蔵し、充電池の容量は2100mAhとなります。 なお、次世代のZenFone高級機も3月に発売する予定で、市場最大4GBメモリを搭載する予定です。もう一つ製品の次世代 ZenFone Zoomは1300万画素、3倍光学ズーム搭載の予定です。

ASUS 3000台灣ドル以下の 2 SIMカードのZenFone C を発売!

参考サイト: http://www.ithome.com.tw/news/93881 4.5型の画面とインテル1.2GHz Atom Z2520 デュアルコアのCPU、3G通信、2SIMカード(SIMフリー)、500万画素の PixelMasterカメラを搭載しています。 狙いはスマートフォン入門の客層で、2990台灣ドル(約11000円)の低価格で提供しています。 メモリは1GBで、内蔵のストレージの容量は8GBとなります。 前方のカメラは30万画素で、GPS機能も内蔵し、充電池の容量は2100mAhとなります。 なお、次世代のZenFone高級機も3月に発売する予定で、市場最大4GBメモリを搭載する予定です。もう一つ製品の次世代 ZenFone Zoomは1300万画素、3倍光学ズーム搭載の予定です。