awk ファンクラブ (333レス)
1-

163: 2011/07/14(木)01:48 ID:I04Pjvnw(1/2) AAS
>>134
これを使って正規表現によって grep とどれだけ実行速度に差が出るのか計ってみた。
外部リンク:pastebin.com

数字だけではよく分からないので、ユーザ時間のグラフを描いた。
画像リンク[jpg]:i53.tinypic.com
赤がawk、青がgrep
こっちじゃないと見れないかも → 外部リンク:tinypic.com

awk もばらつきがあるけど、grep ほどではない。
どちらも、マッチする可能性が高い正規表現は遅くなる傾向があるのかなぁ?
164
(1): 2011/07/14(木)23:45 ID:I04Pjvnw(2/2) AAS
引数で与えられたファイルをメモリに読み込み繰り返し検索する
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)a[n++]=$0;close(f);ARGV=1};{for(i=0;i<n;++i)if(a[i]~$0)print a[i]}'

最近、用途が限られているもの中心だったので使えそうなワンライナーにしてみたよ。きっと。
指摘を受けたので、スペースは削ることにしました。ちっと見づらい?

↓は大文字小文字を無視するもの。こうするとdmesgの出力を何回も検索できる。
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)l[n++]=tolower(a[+n]=$0);close(f);ARGC=1};{for(i=0;i<n;++i)if(l[i]~tolower($0))print a[i]}' <(dmesg)
165: 2011/07/15(金)08:26 ID:ZNSgasJH(1) AAS
見にくいので、セミコロンで改行して欲しい。
166: 2011/07/16(土)01:01 ID:bjjWiIZ6(1) AAS
凄く長くなりそう><
167: 2011/07/16(土)08:37 ID:n6+rd2ar(1) AAS
長過ぎるone-linerを見易く改行するone-linerを書きなさい
168: 2011/07/18(月)15:25 ID:7hj9vKr7(1) AAS
しまったー!書き込む前にちょろっと書き換えたところがバグってました。mawkで動きません。

>>164の下のスクリプトは次に書き換えてください。
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)a[n++]=$0;close(f);ARGC=1};{for(i=0;i<n;++i)if(tolower(a[i])~tolower($0))print a[i]}'
awkのシーケンスポイントってC言語と同じなのかな…痛いミス。

おまけ。使ってるやつ。エスケープシーケンスを使って見つかった文字列に色を付けた。
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)a[n++]=$0;close(f);ARGC=1};
    {for(i=j=0;i<n;++i)if(k=match(tolower(a[i]),tolower($0)))print C(j=!j)I(I(a[i],C(39),k+RLENGTH),C(31),k);print C()};
    function C(n){return"\033["n"m"};function I(x,y,z){return substr(x,1,z-1)y substr(x,z)}'
パターンごとに改行を入れた。少し見やすいか?

>>164の上のスクリプトに色を付ける機能を追加。ずっと分かりやすいと思う。
省5
169: 2011/08/15(月)19:41 ID:yTTHvZyj(1) AAS
classは使えるようになりましたか? > gawk4
170
(1): 2011/08/16(火)15:17 ID:Tuhp+s5y(1) AAS
外部リンク[html]:awk.info
171: 2011/08/16(火)15:27 ID:2FR0TK0E(1) AAS
ちゃんとご自分で読んだものを「つ」されてますか?
172
(3): 2011/08/21(日)15:15 ID:EL3rN3cw(1/2) AAS
ふるいけや "かわず とびこむ" みずのおと
といったレコードを、
field[1]=ふるいけや
field[2]=かわず とびこむ
field[3]=みずのおと
number_of_field = 3
とフィールド分割するすっりした方法を教えて下さい。
173: 2011/08/21(日)16:45 ID:iSpKRH15(1) AAS
" で split すればいい
174: 2011/08/21(日)18:45 ID:EL3rN3cw(2/2) AAS
やはり2chでは馬鹿レスしかつかんか。
175: 2011/08/21(日)18:56 ID:Fst2eXVD(1) AAS
>>172
それ、CSVとかでもよく語られることだけど、意外と面倒なのよ。
例えば「"」自体を文字列に入れたい場合はどうするのか、とか色々決めなきゃならんし。
176: 170 2011/08/21(日)19:12 ID:yoctsNv6(1/2) AAS
あれ?awkでclass使いたいって事なんでしょ?
外部リンク:ja.wikibooks.org
177: 2011/08/21(日)19:24 ID:yoctsNv6(2/2) AAS
>172
素直に区切り文字を変えるしか...

ふるいけや,かわず とびこむ,みずのおと

FS=","
178: 172 2011/08/21(日)22:01 ID:Mb9j323G(1) AAS
自己レスです。
BEGIN { FPAT = "([^" FS "]+)|(\"[^\"]+\")" }
みたいな事をしました。
179: 2011/08/22(月)10:27 ID:bf5ta6rs(1) AAS
awk にわけわかんな機能を増やすよりも、
RFC4180 互換なフィールド分割オプションを実装すればいいのにといつも思う。
180
(1): 2011/08/22(月)10:33 ID:uwcmdhh8(1) AAS
馬鹿の巣窟にわざわざ書き込むな馬鹿
181
(1): 2011/08/22(月)11:11 ID:4smqF+KA(1) AAS
見事に馬鹿の巣窟と化したねえ
182
(3): 2011/11/28(月)19:46 ID:NIKBR+N1(1) AAS
perl -e 'print $1 if /href="(¥d¥d¥d¥d-¥d¥d¥-¥d¥d)"/'
と同じことをawkでやろうとしているのですがわかりません。
awk -e '/href="(¥d¥d¥d¥d-¥d¥d¥-¥d¥d)"/ { print ??? }'
グルーピングしたあとにそれを取り出す方法を探したのですが、わかりませんでした。
awkまたはsedでのやり方を教えて下さい。
183: 2011/11/28(月)20:46 ID:skmC2JM9(1) AAS
>>181
馬鹿じゃないあなたに是非>>182の回答をしてもらおうか。
184
(1): 2011/11/28(月)21:15 ID:Oo5SGhpX(1) AAS
>>182
perl がわからないから求めるものがよくわからないけれど、こんな感じ?

awk '/href=\"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\"/ {print $1}' input.html

awk '/href=\"\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\)\"/ {print $1}' input.html

BEGIN とか使ったほうがいいのかもしれないけれど
awk '/href=\"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\"/ {print $1} BEGIN { 何か書く }' input.html
185
(2): 2011/11/28(月)23:48 ID:mynsjW2o(1) AAS
>>182
どのawk使っているか分からないし、入力の仕様も分からないけど、どこでも動くのはこんな感じ
awk -F\" '/href=/ { for (i=1; i<=NF; i++) if ($i ~ /href=$/ && $(i+1) ~ /[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/) print $++i }'
gawkでも正規表現パターンのグループを保存している組み込み変数はなかった気がする
186
(2): 2011/11/29(火)00:49 ID:6tCpTQmb(1/2) AAS
gawk4.0なら
awk '{if (match($0,"href=([0-9]{4}-[0-9][0-9]-[0-9][0-9])",a)) print a[1]}'
じゃ駄目?
187
(1): 2011/11/29(火)01:04 ID:6tCpTQmb(2/2) AAS
ごめん、
awk '{if (match($0,"href=\"([0-9]{4}-[0-9][0-9]-[0-9][0-9])\"",a)) print a[1]}'
188: 2011/11/29(火)16:01 ID:vLvhB/JG(1/2) AAS
>>184-186
うーん、あまりわかりやすい方法ではないですね。
メンテナンスしにくいコードになってしまうので、perlが使えるよう上司に交渉したほうがよさそうです。
回答いただいた方、ありがとうございました。
189
(2): 2011/11/29(火)16:28 ID:MmS6Zrem(1) AAS
>>185はともかく>>186-187の方がPerlみたいにグローバル変数にマッチ結果を入れるより分かりやすいと思うのって俺だけ?
190
(1): 2011/11/29(火)17:00 ID:vLvhB/JG(2/2) AAS
>>189
186は、単にgawk独自の拡張機能を知ってないとわかりにくいというだけであり、
マッチした結果を明示的に変数に代入するのはいいことだと思います。
なお個人的には
match(string, rexp, matched)
はmatchedがいわゆるout変数になるため分かりにくいです。
matched = match(string, rexp)
のほうがよかったです。
191: 2011/11/29(火)17:27 ID:8ESv/UnH(1) AAS
>>190
何言っているのかちょっと分からん。言語仕様上awkは配列を返せないだろ
192: 2011/11/30(水)00:16 ID:CRejWMLU(1) AAS
gawk独自の実装はどうも…という話がよく出てくるけど、
gawk/mawk/true awk相互で運用する必要ってよくあるものなの?
またはbusyboxのawkで使いたいとか?
1-
あと 141 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s