awk

先頭が#で始まる行だけ出力。 awk '/^#/ {print $0}' test.txt 先頭が#で始まらない行だけ出力。 awk '/^[^#]/ {print $0}' test.txt シェルの中でawkを実行して,その結果を変数として,次のコマンドへ渡す。 下の例ではresへawkの結果を書き込んで,$resと…

先頭にゼロをつけて桁を揃える。 BEGIN{ } { split($1,x,"-"); str=sprintf("%4d-%02d-%02d",x[1],x[2],x[3]); print str,$2 } END{ }input : 2015-9-5 516773output: 2015-09-05 516773

列方向のデータのソートを行う。 input : 999999 37705 55754 output: 37705 55754 999999 BEGIN{ FS = " " } { for(k=1;k<=NF;k++){ id[k] = $k } sort(id,NF) for(k=1;k<=NF;k++){ printf id[k]" " } printf"\n" } END{ } function sort(ARRAY,ELEMENTS,tm…

出力ファイルをだいたい10以上にすると, "makes too many open files" というMSGが出て10以降のファイルが開かない. きちんとclose(FN)としておくことが必要. for(j=0;j<=209;j++){ FN = "DiffCorr"j".csv"; print (ARGV[2],ARGV[3],j) >> FN; close(FN);…

awkで時間をシフトして,任意の時間形式で出力(strftime). BEGIN{ #Shift time #2009-07-18 12:23:38 a = 5 #5 hours shift } { gsub(/-/," ",$1) gsub(/:/," ",$2) str=$1" "$2 #raw time t = mktime(str) #shift time t2 = mktime(str)-(60*60*5) #remove…

目に見えない文字コード,それはスペース,タブ,改行. それらを削除するためのコマンド for(i=1;i<=NF;i++){ y=length($i) gsub(/[ \t \n \r]/,"",$i); z=length($i) print y,z,$i # 8 7 abcdefg } あと,アルファベット含む行以外を出力しようとして,gre…

ひさびさのawk tips.10行ごとに表示するのに, 今までメインの中で awk '{if(NR%10==0) print $0}' file とやっていたのだが, 本文以前の段階で, awk 'NR%10==0 {print $0}' file でも可能とのこと.知らなかったー 参考

久しぶりに,printfの書式. awk -f Multiple.awk AdverbNumbers.csv ./TimesHour/Corr_LogDiff_Rand.csv | awk '{if($4>($5+$6) && $3>1 )print $0}' |sort -k4gr | head | awk '{printf("%.2f %.2f \n",$5,$6)}'

mecab辞書から,いろいろな書き込みパターンの「歯がゆい」を抽出. awk -F"," '{split($14,x,"/");for(i in x)print x[i]}' jisyo.csv | sort -u | awk '{print "../command.sh",$1,NR}' > ~/Dropbox/DataCollectionAPI/Matome.sh

連想配列を駆使してデマツイートした人たちの全ツイートを抽出. for i in `ls | grep ^2011-03-1`;do echo $i;awk -f Multiple2.awk Member_Dema.txt $i >> MembersTweet_Dema.txt;done;んで,Multiple2.awkの中. BEGIN{ FS=" "; } FILENAME == ARGV[1]{ #…

ツイッターで,返信マークの「@ZeroSano」みたいなのを削除する. gsub(/^@+[ -~]*/,"",$1); @から始まる連続した半角英数を削除している.

なんだかセパレーターがうまく動かない時は,改行コードが デフォルトかどうか確認すべし.RSで指定している. awk 'BEGIN{FS="\x01";RS="\n"}{print $1}' 1.csv

2カラム目の全角文字数の長さのみを出力する. awk -F"," '{gsub(/[ -~]/,"",$2);print(length($2))}' test.txt

連想配列が使えるawkの配列.lengthが0になるように初期化する. x[i]に単語が入っているとして,読みはじめを変えて,異なり語数をカウントする例. for(seed=0;seed

IPPからFPLへのプロット変換. awk '{if($3==1)x[$1]++}END{for(i in x)print i,x[i]}' KY.dot | sort -t"-" -k1n -k2n -k3n | awk 'BEGIN{x=0}{x=x+$2;print $1,x}' > KY.fpl 日付を2006.11.1を0とする整数値に直して,欠損している部分を補う例. gawk 'BE…

とにかく,全角半角,大文字小文字関係なくKYを含む行を探して出力する. awkの参照条件は「\|」をつけて繋ぐとor条件,「|」だけだとand条件になる. awk /KY\|ky\|KY\|ky/'{print ARGV[1],$0}' test.txt 参考 さらに,抜き出した前後の文字列をチェッ…

awkで書かれたコマンドを,スクリプトファイルをかまさず,そのままターミナルで実行するにはbashが便利. awk 'BEGIN{q="\047"}{for(i=1;i<=4;i++){print "awk",q"{x="$2";print $2-x}"q,i"_"$1,"> ./hoge/"i"_"$1}}' Hoge.txt | bash

2列目に数字かアルファベット(大+小)が含まれていない場合のみ、データを出力。 awk '{a=gsub(/[0-9a-zA-Z]/,"",$2);if(a==0)print $0}' test.txt2列目に半角文字が含まれていない場合のみデータ出力。 awk '{a=gsub(/[ -~]/,"",$2);if(a==0)print $0}' test…

macにはデフォルトでgawkが入っていないため、mktime関数が使えない。そこで、本家の指示に従って、 こちらからgawkの最新版、2011年3月現在なら、gawk-3.1.8.tar.gzをダウンロード。 展開して後は、 cd gawk-3.1.8 ./configure make make check sudo make i…

ユーザー定義関数の呼び出し

awk

{ for(t=0;t<10;t++){ print X(t); } } function X(a){ c=a*10; return c }

ユーザー定義関数の呼び出し

awk

{ for(t=0;t<10;t++){ print X(t); } } function X(a){ c=a*10; return c }

外部から変数を指定て実行 -v オプション。 awk -f KSTest.awk -v alpha=-1.0 -v beta=-0.05 Input.csv

2次元配列とか データを2次元配列に保存して、1列目が2のものだけ出力する。 1 2 1 9 2 3 2 9 {x[$1","$2]=1;} END{ for(item in x){ split(item,y,","); if(y[1]==2){print y[1],y[2];continue;} } } 多次元配列へのアクセスは、要素をsplitしてから大なわ…

やたらデータ量の多いファイルを分割するtips 重複データが混じっている可能性があるため、 sortしてuniqしてデータを確認しようとすると、ことごとく失敗するので。 こんなメッセージを残して、やってくれない。 数字の引数nをやめたりもしたが、結果は同じ…

2つのファイルの読み込み awk -f Multiple.awk [Inputfile1] [Inputfile2]Multiple.awkの中身。 BEGIN{ FS=" "; } FILENAME == ARGV[1]{ if(NR==1)N0=$2; x[$2]=$1; if($2>0)N1=$2; } FILENAME == ARGV[2]{ y[$2]=$1; if($2>0)N2=$2; } END{ print N0,N1,N2,…

連想配列を使ったランダムシャッフル 連想配列というのは、配列の添字(x[A]でいうと、Aのこと)が、 文字列扱いになっているという意味で、見掛け上の添字がx[1],x[2]となっていても、 1や2は文字列扱いされている。 そのため、呼び出すのにfor i in を使うと…

10回繰り替えして実行 何行含まれていてもいいから、適当なファイル[Tekitou]がフォルダにあるとして、 awk 'BEGIN{for(i=0;i<10;i++) print i}{exit}' Tekitou とすればよい。メインに入ったら速攻で抜けるということ。

外部から変数を与える。 awkプログラム(MakeTimeSeries.awk)の中で使っている変数Binに、 外側から値を与えてプログラムを走らせたいとき。 awk -f MakeTimeSeries.awk -v Bin=15 Inputfile.csv

1999年10月1日が、1998年の1月1日から数えて、何秒後、何日後なのかを調べる。 echo 1 > tmp awk '{sec=mktime("1999 10 1 0 0 0")-mktime("1998 1 1 0 0 0");print sec,int(sec/(60*60*24))}' tmp rm tmp

数字とスペースの含まれる行のみを取り出す awk '/^[0-9 ]+$/ {print $0}' [Inputfile.csv] 参考「^[0-9 ]」が0から9までの数字とスペースのこと、 「+」が、前述(ここで言うと「^[0-9 ]」)の繰り返し表現、 「$」は文字列の文尾の表現になっている。