awk

カンマ区切りのデータ、しかし4カラム目はダブルコーテーションに 囲まれた間続くファイルの扱い。例 InputFile.csv 2009-09-01,F1,123,"abcde,fgh,ijk",987654 2009-09-01,F1,123,"abcde,fgh,ijk",987654 2009-09-01,F1,123,"abcde,fgh,ijk",987654ダブルコ…

シングルクオート(Single quote)の出力例 BEGINでqにシングルクオートの8 進数のエスケープシーケンスである「\047」を定義している。List.csvファイルから、上位100ファイルに対してawkの処理を行わせる、 シェルスクリプトを書くための、awkスクリプト。 a…

awkなどを駆使して累積分布を書く。 あらかじめ、データサイズNは調べておく必要あり。 awk '{print $1}' Data.csv | sort -nr | awk 'BEGIN{N=30108}{print $1,NR/N}' > CDFData.csvIgorの時と考え方は同じ。 もっといい方法を思い出したら、後で書く。 awk…

Remove space from 1st column. gsub(/ /,"",$1);

length

awk

文字数のバイト数を数えるawkのlengthコマンドをunixマシンで行うとき、 sjisだとカウントしてくれないが、utf8だとカウントしてくれることに、 作業が終わってから気づく・・・。 windows上のcygwinだと、sjisでもlengthカウントをしてくれる。

Awk Scriptを書くときの注意点。 ヘッダーの部分に記述する #!bin/awk -f は、unix上で「which awk」で確認して、出てきたパスを使用する。 whcih awkの結果が /usr/bin/awkの場合は、 #!usr/bin/awk -f と記述し直すこと。エラーの場合、 /bin/awk -f: bad …

if文を使ってスクリプトにする。 ある文字列が含まれているかどうかを精査する関数matchを使う。 「ブログ記事のURLからユニークなブログ自体のURLを抽出したい。」 [Inputfile] http://YYYYYYYYYY.blog64.fc2.com/blog-entry-1.html http://ameblo.jp/XXXXX…

 シングルクォートの出力

awk

\047 と \x27が対応する。 echo a | awk '{print "\047" $1 "\x27" }'→'a' 引用元 awkでawkコマンドを書く、みたいなトリッキーな状況下で使える。 例) フォルダ以下のCSVファイルに対して、awkで処理するコマンドを書くawkスクリプト。 さらに、sortとuniq…

処理を強制終了

awk

逐次処理を強制的に終了したい場合は、Cと同じでexitが使える。 例)[InputFile]の10行目から20行目だけを見たい場合 gawk '{if(NR>20)exit;if(NR>9)print $0;}' [InputFile]

Tips

配列の中身をすべて出力

awk

1カラム目をラベルにして、配列にカウント。 その後、配列に中身が入っているものをすべて出力する。 gawk '{x[$1]++;}END{for(i in x)print(i,x[i]);}' [InputFile] 但し、ラベルが数値の場合昇順に出力されるわけではないので、 その後、ソート等の処理が…

曜日の取得 + Next

awk

与えられた日付から、曜日を取得する。 1998年1月1日の曜日を知りたい場合。 Week=strftime("%a",mktime("1998 01 01")); print Week; としておくと、「Thu」という曜日が出力される。 ちなみに、時間が繰り上がった場合でも対応OK。●Examples[戻り値]: s…

外部ファイルから呼び出して実行

awk

awk スクリプト実行を簡素化 スクリプトファイルの先頭行に「#!/bin/awk -f」を追加しておく。 Sample.awk (1カラム目の4文字を取り出す処理) #!/bin/awk -f BEGIN{ FS=","; } { print(substr($1,1,4)); } これをcsvファイルすべてに対して処理するには、 fi…

 文字列切り出し

awk

文字列Strの頭からi番目のn文字を取得 substr(s,i,n) 文字列sのi番目から始まるn文字を返す. jsubstr(s,i,n) 日本語文字列sのi番目から始まるn文字を返す.

外部から引数を設定

awk

[InputFile]は「Time Number」として、Time=100の前後の 40ポイントを別のファイルに、切り分けて出力する。 どの前後を取るかは、外部引数で設定する。外部引数をTとする。 gawk '{x[$1]=$2;i++}END{FN=ARGV[1]"Down.csv";FN2=ARGV[1] "Up.csv";for(i=0;i F…

Tips

awk

データのない部分をゼロで埋める。 [InputFile]が「Number Time」となっているとする。 例) 100 0 103 1 98 5 :[OutputFile]に[Time Number]にして出力する。 例) 0 100 1 103 2 0 3 0 4 0 5 98 : gawk 'BEGIN{x=0}{for(i=1;i

 日次の時系列作成

awk

秒単位の時間情報を、2006/11/01をt=0としたシリアル日に直す。 [InputFile] 2006-11-01 01:05:11 BlogProvider gawk '{ split($1,Date,"-"); split($2,Time,":"); str=sprintf("%s %s %s %s %s %s",Date[1],Date[2],Date[3],Time[1],Time[2],Time[3]); day=…

決まった文字が含まれるデータ行の抽出 「【Xbox】」という文字列が含まれるデータを抽出する。 awk '/【Xbox360】/ {print $0;}' [InputFile] > [OutputFile] 「/Xbox/」または「/wii/」という文字列が含まれるデータを抽出する。 awk '/\/Xbox360\// || /\…

与えられた年月日、時分秒から秒単位の時系列を作成 (※ 以前のコメント参照。)[InputFile] 2009-01-01 12:34:56 gawk '{split($1,Date," "); split(Date[1],Day,"-"); split(Date[2],Time,":"); str=sprintf("%s %s %s %s %s %s",Day[1],Day[2],Day[3],Tim…

便利な組み込み変数 NR 行数 NF 1レコード(行)あたりのフィールド(列、カラム)数

Tips

awk

For文の書き方 1列目:ヘッダ、2列目〜100列目:数のファイルがあるとする。 1行ごとに、列2〜列100の数値の合計値を計算して、出力する。gawk '{A=0;for(i=2;i; [OutputFileName] Scriptの実行 AwkScript.awkを作成する。 ファイルの内容は1文、cygwin上の…