1 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:55:42 .net] 腐っても鯛? 騏も老いては駑馬に劣る? 三人の碩学が生み出したスクリプト言語AWKについて語るスレ ◆ 前スレ awkについて語るスレ pc10.2ch.net/test/read.cgi/tech/1023556171/ ◆ 関係スレ シェルスクリプト相談室 pc10.2ch.net/test/read.cgi/tech/1112553783/ AWKでCGI pc10.2ch.net/test/read.cgi/php/1171804314/ 【sed】シェルスクリプト総合@LINUX Part2【awk】 pc10.2ch.net/test/read.cgi/linux/1154578200/ ◆ 参考 The AWK Programming Language (Brian Kernighan): ttp://cm.bell-labs.com/cm/cs/awkbook/index.html GAWK (GNU Projedt): ttp://www.gnu.org/software/gawk/
709 名前:デフォルトの名無しさん mailto:sage [2012/08/04(土) 09:23:47.83 .net] Rubyはそこそこワンライナーも書ける感じがする、awkやPerlほどじゃないけどね Pythonは流石にコード起こさないと辛いことが多いが
710 名前:デフォルトの名無しさん mailto:sage [2012/08/04(土) 10:27:49.07 .net] awkでmatlabみたいなベクトル演算できるようにしてほしい
711 名前:デフォルトの名無しさん mailto:sage [2012/08/04(土) 16:48:36.10 .net] awkでクラスを使えるようにしてほしい
712 名前:デフォルトの名無しさん mailto:sage [2012/08/04(土) 17:06:19.06 .net] awkで全ての魔法少女を救ってほしい
713 名前:デフォルトの名無しさん mailto:sage [2012/08/04(土) 17:08:30.07 .net] awkさんは魔女
714 名前:本田 mailto:sage [2012/08/05(日) 07:21:28.03 .net] Awk++ awk.info/?doc/dsl/awkplusplus.html OO in AWK++ The awk++ language provides object oriented programming for AWK that includes: classes class properties (persistent object variables) methods inheritance, including multiple inheritance lawker.googlecode.com/svn/fridge/lib/bash/awk++/version21/awkpp21.zip
715 名前:デフォルトの名無しさん mailto:sage [2012/08/05(日) 09:56:26.63 .net] デバッグ大変過ぎて死ぬる $ cat witch.awkpp class Witch { var spell method new() { spell = "mahalic mahalita" } method perform() { print spell } } class Samantha : Witch { method perform() { print "twitch" } } BEGIN { # wife = Witch.new() エラー要因行 wife = Samantha.new() wife.perform() } $ gawk -f awkpp -r witch.awkpp gawk: -:10: () エラー要因行 gawk: -:10: ^ syntax error gawk: -:10: () エラー要因行 gawk: -:10: ^ 表現の char '?' は不正です。
716 名前:デフォルトの名無しさん mailto:sage [2012/08/22(水) 00:09:49.86 .net] size: 656 byte, supports -o -v option. Array A and B can be the same (NEW) function xagrep( o, re, A, B, this, a, i,k ){ k=0;B[0]=A[0];if(o~"-v"){for(i=1;i<=A[0];i++){if(!match(A[i],re)) B[k+=1]=A[i];}B[0]=k;return k}; if(o~"-o"){B[B[0]+1]=0;for(i=1;i<=A[0];i++){a=A[i];if(i==k){i=i-B[B[0]+1]+1;B[B[0]+1]=k;k=B[0]+2; while(i<=B[B[0]+1]){B[i++]=B[k];delete B[k++];}i=B[B[0]+1];k=i;B[B[0]+1]=0;}while(match(a,re)){ if(i>k){B[k+=1]=substr(a,RSTART,RLENGTH);}else{B[B[0]+1+(B[B[0]+1]+=1)]=substr(a,RSTART,RLENGTH); k++}a=substr(a,RSTART+RLENGTH)}}if(i<k){i=k-i;k=B[0]+1;B[0]=i+B[B[0]+1];while(i<B[0])B[i+=1]=B[k+=1]; while(i<k)delete B[i+=1];}return B[0]}for(i=1;i<=A[0];i++){if(match(A[i],re))B[k+=1]=A[i];}B[0]=k;return k; } これ以上削れるところ無いかな? 高速化+サイズ優先で、変数はできるだけ使う数を少なくとの条件で
717 名前:デフォルトの名無しさん mailto:sage [2012/08/22(水) 09:51:11.01 .net] >>708 その3つの条件の優先度がわからんな。 結構同じ部分式があるので変数に入れた方が変数は増えるけど短くなるし 場合によっては速度も速いとかありそうだけどどうなん? 例えばB[0]は特別な用途っぽいけどxとか1文字変数にしてreturnの直前に 書き戻した方が文字数は稼げる。 あと細かいがhoge+=1より++hogeの方が1文字短いとか、いらない「;」が 残ってるとか詰めが甘いところがまだあるね。
718 名前:デフォルトの名無しさん mailto:sage [2012/09/30(日) 22:45:00.64 .net] 以下のようなデータの処理について質問いいでしょうか。 $1に経過時間(時刻)、$2に「速度」があれば$3の数値は速度を、$2$3に 「up a」「down a」などとあればその時刻での行動を示します。 このデータからup、downの場所を求めたいと思います。 つまり、下の例で移動開始からの距離3でup a、距離3.5でup b、という具合です。 経過時間と速度から場所を計算するだけですが。速度を変更するタイミング・ 回数は不定、速度データと行動データはともに経過時間順に記録されています。 速度変更をどう扱えばいいのか、ちょっと頭が回りません。 ---元データ例--- 0 速度 10 50 速度 20 200 速度 25 30 up a 35 up b 40 down a 40 down b 50 up a 70 down a 200 up c 250 down c ---処理後--- 3 up a 3.5 up b 4 down a 4 down b 5 up a 6 down a 12.5 up c 14.5 down c
719 名前:デフォルトの名無しさん mailto:sage [2012/10/01(月) 11:28:30.42 .net] 疑問を提示。 $1が常に時刻で$2が速度のときの$3が速度なら、 30 up aのときに30 * 10
720 名前:で300 up aになるんじゃないだろうか。 同じように、70 down aのときに50 * 10 + (70 - 50) * 20で900 down aになるんじゃないだろうか。 $3が速度(単位時間当たりの移動量)ではなく単位移動量当たりの所要時間なのであれば、 30 up aで30 / 10 = 3、70 down aで50 / 10 + (70 - 50) / 20 = 6になるんだけどね。 [] [ここ壊れてます]
721 名前:デフォルトの名無しさん mailto:sage [2012/10/01(月) 13:21:34.21 .net] 実装してみた。速度が途中に出てきてもいいようにposを毎回計算するから効率悪いけど。 -- BEGIN { sCount = 0; } $2 == "speed" { sTime[sCount] = $1; sSpeed[sCount] = $3; ++sCount; next; } { pos = 0; for (ic = 1; ic < sCount; ++ic) { if (sTime[ic] > $1) break; pos += (sTime[ic] - sTime[ic - 1]) / sSpeed[ic - 1]; } pos += ($1 - sTime[ic - 1]) / sSpeed[ic - 1]; print pos, $2, $3; }
722 名前:デフォルトの名無しさん mailto:sage [2012/10/01(月) 20:30:33.48 .net] >>711 すみません、前者ですね。なんだろう、恥ずかしい。 >>712 なので、アクション部の / を * に変えればよさそうです。 お二方、ありがとうございます。
723 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 11:40:43.98 .net] awkにかわる同等のものあります?
724 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 13:08:08.26 .net] python
725 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 13:13:55.85 .net] >>715 awkみたいに使い勝手いいのかな?
726 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 13:18:24.65 .net] 良いですよ
727 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 13:24:31.23 .net] >>717 ありがとす。勉強してみます
728 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 14:45:25.45 .net] はい
729 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 03:49:18.86 .net] “任意の記号”を含んだシェル変数をawkに渡すことは可能ですか?たとえば [user@localhost ~]$ var='hoge' [user@localhost ~]$ echo "hoge" | awk -v var="$var" ' $0 ~ var {print var} END {print var} ' hoge hoge ここで、varに$を含ませると [user@localhost ~]$ var='hoge$fuga' [user@localhost ~]$ echo "hoge" | awk -v var="$var" ' $0 ~ var {print var} END {print var} ' hoge$fuga とうまくマッチしませんでした。var自体は渡されているはずですが、何が原因でしょうか?
730 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 11:23:41.42 .net] >>720 いちぎょうめのひだりがわの var は、ひょうかのさいに せいきひょうげんへのかたへんかんがおこなわれる。 $0 ~ /hoge$fuga/ {print "hoge$fuga"} END {print "hoge$fuga"} めたもじとなってしまうものは、じぜんあるいはこーどのなかで えすけーぷするひつようがある。
731 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 11:29:22.31 .net] ~(チルダ)の右辺は正規表現として解釈されるから、"hoge" ~ /hoge$fuga/ でマッチするわけがない。 逆に寧ろ、"hoge$fuga" ~ /hoge/ ならマッチする。
732 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 11:33:09.61 .net] >>720 >721も>722もどちらも原因。やりたいことをよく整理しよう。
733 名前:720 mailto:sage [2013/02/06(水) 15:09:21.72 .net] すいません、echo "hoge"ではなくecho "$var"でした。 ただ、結果は>>720 と同じです。 要は入力ファイル内の「メタ文字込みの任意の文字列」を、別の「メタ文字と改行込みの任意の文字列」で置換する、 というのをメタ文字のエスケープ等の面倒な処理をせずにサクッとやりたいのですが、できますか?
734 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 05:01:43.19 .net] ムリ 予め「メタ文字と言っても $ しか出てこない」とか判ってるなら大したこと無いけど 一般化すればするほど面倒になる
735 名前:720 mailto:sage [2013/02/07(木) 22:14:56.21 .net] >>725 やはりそうですか。 今までこういった処理はsedでしこしこエスケープしてやってたんですが、いい加減面倒になったので、 たとえばfgrepみたいに正規表現をオフにして処理する方法はないかと探しているんですが、 awkでは無理ですか・・・。
736 名前:デフォルトの名無しさん mailto:sage [2013/02/08(金) 11:20:14.98 .net] >>726 単に一致なら正規表現なんか使わずに比較すればいいじゃん。 fgrepで事が足りるのならawkからfgrepを起動すればいいじゃん。
737 名前:デフォルトの名無しさん mailto:sage [2013/02/08(金) 19:27:47.04 .net] >>726 fgrepなら index()関数じゃないの?
738 名前:720 mailto:sage [2013/02/09(土) 15:32:27.55 .net] >>727 >単に一致なら正規表現なんか使わずに比較すればいいじゃん。 意味が分からないんですが、awk上の話ですよね? >>728 index()の引数は文字列だから、これをうまく使えば目的の処理ができる・・・のかな? でもなんかawkでごちょごちょやるより、メタ文字をエスケープする前処理をかますなり 何なりしたほうが素直な気がしてきた・・・。たとえばこんな感じで $ var='hoge$fuga' $ var2=$( echo "$var" | sed 's/\$/\\\\$/g' ) ←エスケープ処理 $ echo "$var" | awk -v var="$var2" ' $0 ~ var {print var} END {print var} ' hoge\$fuga hoge\$fuga
739 名前:デフォルトの名無しさん [2013/02/09(土) 17:49:52.25 .net] /bin/shでごちょごちょやるのが好みなら、awkもfgrepも使わず、case文でやりゃいいんじゃないの。
740 名前:デフォルトの名無しさん mailto:sage [2013/02/09(土) 21:34:09.39 .net] >>729 文字列の比較は等号でできるって認識はないの?
741 名前:デフォルトの名無しさん mailto:sage [2013/02/10(日) 14:31:49.57 .net] >729 いや、その方法でも結局 ' はエスケープが必要でしょ。 ダイレクトにシェル変数に入れる方法か、 ファイルなどに吐き出しておく方法の方が安定。 まぁそれでも改行とか制御文字入れられるともにょる場合があるけどな。
742 名前:デフォルトの名無しさん mailto:sage [2013/02/11(月) 20:15:01.17 .net] そこまでめんどくさくなったらperlとかrubyとか使った方が楽だぞw
743 名前:デフォルトの名無しさん mailto:sage [2013/02/11(月) 22:46:25.57 .net] 何で gawk -f とか使わずワンライナーに拘るのかねぇ
744 名前:デフォルトの名無しさん mailto:sage [2013/02/12(火) 22:00:38.07 .net] >>732 中韓ファイルを作るのは情弱の仕事(ドヤ顔 >>734 ワンライナーディスってんの?
745 名前:デフォルトの名無しさん [2013/03/11(月) 10:05:12.56 .net] # # text converter ( Mac to MS-DOS on Windos/MS-DOS machine) # convert CR to CR+LF # BEGIN{ RS = "\r" } { print }
746 名前:デフォルトの名無しさん [2013/03/15(金) 08:05:25.28 .net] # # Line(行数)を数える # END { FNR }
747 名前:デフォルトの名無しさん [2013/03/20(水) 19:07:17.00 .net] # text to html converter # usage: awk -f txt2htm.awk infile1.txt > outfile2.html BEGIN{ print("<html>"); print("<head>") print("<titile> My favorite URLs </titile>") print("</head>"); print("<h1> </h1>"); print("<body>"); } /^[:space:]*http/ { print "<A HREF=\""$1"\">"$1"</A><BR>"} END{ print("</body>") print("</html>") }
748 名前:UNIX(LF) to DOS(CR+LF) conversion [2013/03/21(木) 21:15:00.86 .net] awk 1 infile1 > outfile2.txt
749 名前:デフォルトの名無しさん mailto:sage [2013/03/21(木) 22:10:08.07 .net] # awk -f add.awk BEGIN { s1 = "323524855" s2 = "4972560" reverse(a2, s2) size = reverse(a1, s1) # s1 > s2 carry = 0 for(k = 1; k <= size; k++) { # s1 > s2 d = a1[k] + a2[k] + carry if(d >= 10) { e[k] = d - 10 carry = 1 } else { e[k] = d carry = 0 } } if(carry == 1) { e[k] = 1 size = k } g = produce_string(e, size) printf("%s + %s = %s\n", s1, s2, g) printf("%f\n", s1 + s2) exit }
750 名前:デフォルトの名無しさん mailto:sage [2013/03/21(木) 22:11:11.39 .net] # >>740 のつづき function reverse(a, s, k, i) { k = 1; size = length(s) for(i = size; i >= 1; i--) { a[k++] = substr(s, i, 1) } return size } function produce_string(a, size, i) { g = "" for(i = size; i >= 1; i--) { g = g a[i] } return g }
751 名前:デフォルトの名無しさん mailto:sage [2013/03/21(木) 22:12:57.08 .net] function produce_string(a, size, g, i) {
752 名前:grepをawkで [2013/03/22(金) 13:32:02.74 .net] # usage: awk -f grep.awk char1 file1 file2 BEGIN{ pattern = ARGV[1] ARGV[1] = "" } $0 ~ pattern {print($0" File name=" FILENAME)}
753 名前:デフォルトの名無しさん mailto:sage [2013/11/30(土) 12:16:25.95 .net] $ echo 10 20 30 | awk '{for(i=0;i<4;)print _$++i}' 10 20 30 _$++iでも$++iでもどちらでもいけるのですが、アンダースコアが付いて何故大丈夫なのでしょうか?
754 名前:デフォルトの名無しさん mailto:sage [2013/11/30(土) 16:04:55.55 .net] すいません、わかりました 空の変数_と$++iの結果が一緒になってただけなんですね
755 名前:デフォルトの名無しさん mailto:sage [2013/11/30(土) 20:37:58.81 .net] 単に式を並べると文字列連結になる、の罠か
756 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 00:10:13.15 ID:T3/5Epfc.net] 保守 てか半年近く書き込みが無かったか
757 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 13:45:38.45 ID:Db2IzPol.net] とあるgawkスクリプトの先頭で {last_hoge=hoge; hoge=$ 3} ってやってるんだけど、 hoge=$ 3はhoge=$3の間違い? それともこういう記法がある?
758 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 14:56:08.53 ID:A73fEYrr.net] >>748 $ は演算子だから、a=b+1をa = b + 1と書くようなものかな。
759 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 21:10:32.64 ID:Db2IzPol.net] ええー 演算子だったのかあ。衝撃の事実
760 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 12:36:45.70 ID:SQaIR8ej.net] 演算子だから、変数でもいいよ。
761 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 14:34:12.09 ID:YSeiuWKu.net] 式が書けるね。 $ は一番優先順位が高いから、かっこで括らにゃいかんが。
762 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 15:12:13.25 ID:k3tDznaJ.net] 今はじめて知った。haskellの$は演算子だって知ってたけど、awkでも演算子だったんだね。
763 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 13:37:28.35 ID:cBz5RbAX.net] そして半年近く書き込みが無かった
764 名前:デフォルトの名無しさん mailto:sage [2014/10/15(水) 03:28:03.90 ID:SS4U/DMU.net] いやawkスレなんて普段はそんなに話題ないだろ
765 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 15:46:10.36 ID:TQsAGJgk.net] 質問させてください 今ディレクトリ内のファイルの名称とサイズのリストを作りたいと思っています コマンドとしてはls -lを実行していますがこれをさらにawkにパイプしています ただしファイル名にスペースが含まれているため以下のような苦肉の策をとっておりますが ls -l | awk '{print $5 "\t" $9$10$11$12$13$14$15$16$17$18$19}' 10個以上で区切られてる可能性もあるため根本的な対応をしたいと考えていますが よい案はありますでしょうか
766 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 17:25:55.68 ID:EsuQiv22.net] # ファイル名に「"」が含まれていたら知らね。 ls -Ql |awk '{split($0, foo, "\x22"); print $5 "\t" foo[2]}'
767 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 23:41:50.65 ID:stXOK2Vv.net] Qオプションは勉強になった ls -l|awk '{s=$5;for(i=1;i<9;i++)$i="";print s"\t"$0}'
768 名前:名無しさん@そうだ選挙に行こう mailto:sage [2014/12/13(土) 17:07:55.12 ID:8LbgKkKk.net] ¥034 は ” (半角) ¥035 は # (半角) でおkですか?
769 名前:名無しさん@そうだ選挙に行こう mailto:sage [2014/12/13(土) 18:17:16.35 ID:FQOeA8KF.net] >>759 いいえ違います。
770 名前:デフォルトの名無しさん mailto:sage [2014/12/14(日) 00:00:31.34 ID:7YfznIJB.net] どちらも非可読文字ですね。そしてそうなるとスレ違い。 awkと絡むのなら具体的にどうぞ。
771 名前:デフォルトの名無しさん mailto:sage [2015/02/03(火) 10:36:52.13 ID:Dvc0nyMp.net] Terastationのファイル・ホルダ名に使うとファイルレプリケーションでエラーが起こる文字があって、それを変換するバッチを生成する時にこのマイナー言語が大活躍した。 約80万件のファイルホルダ名から抽出するのに10分程度だった。
772 名前:デフォルトの名無しさん mailto:sage [2015/05/26(火) 00:18:03.33 ID:Y5HiR/XE.net] Gawk4.1.2が出たなあ、と思ってたらすぐ4.1.3が出た。 素人には違いがあまり分からんのだが。
773 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 09:20:55.82 ID:PB6Yeih1.net] www.amazon.co.jp/AWK 実践入門-Software-Design-plus-中島/dp/477417369X 新しい本、出たんだな 廃れないのが凄い
774 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 20:45:34.22 ID:vBAc8MUN.net] >>764 買ってきた。まだ最初の方と最後の方を眺めただけだけど。 ページiv(「はじめに」)でawkの表記について「本書内では、いずれの 場合もすべて小文字のawkという表現に統一しております」と あるのに、書名がAWK。 巻末のリファレンスで気になったところ。 演算子の優先順位に触れていない、フィールド演算子が 「特別な意味を持つな変数」の中に入れられている。 参考書や文献がないけど、今時は「ネットでググれ」かな。
775 名前:デフォルトの名無しさん mailto:sage [2015/07/06(月) 22:02:56.12 ID:Wnwr3Nh9.net] Mono: Playback -9707 [5%] [-97.07dB] [on] 上の行からパーセントを除いた数字(上の例だと5)を取得したいのですがどのようにしたらよいでしょうか? パーセントの値は0から100の整数だと思います
776 名前:デフォルトの名無しさん mailto:sage [2015/07/07(火) 15:47:02.78 ID:NFKuqu84.net] # $0 に入っているとして sub(/%.*/, ""); sub(/.*[^0-9]/, "");
777 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 11:55:27.32 ID:rptAPQZX.net] awk -F"[%[]" '{print $2}' ではまずい?
778 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:52:19.39 ID:GgkVcZ7j.net] >>767 ,769 ありがとうございました どちらでも希望の結果を求めることができました
779 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 10:45:11.15 ID:VcZTZ3UB.net] テンプレである筈の1が読めないんだが、このスレ的にはPOSIXで書くのが 正統?普段はGawkしか使わないので一応確認。
780 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 18:16:27.97 ID:RqA0Le8+o] アホじゃないエイホだ
781 名前:デフォルトの名無しさん [2015/10/10(土) 22:36:33.12 ID:1AEUTcmG.net] awk の a は、aho の a ただし、エイホと読むらしい へぇーーーーー
782 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 17:12:05.45 ID:VH2jVHwT.net] awk使ってるシェルスクリプト見ると逃げてるなあと思う
783 名前:デフォルトの名無しさん mailto:sage [2016/02/18(木) 00:13:16.92 ID:E3KgV2Kz.net] 普通は x[3]=5 と書くが、=なしの x[3] だけでもエラーとならず、x を配列として確保し、length(x)=1 になるのを発見 まあ、あまり必要ないけど
784 名前:デフォルトの名無しさん mailto:sage [2016/02/18(木) 23:58:18.64 ID:kHIvdCfG.net] まあ、gawkのマニュアルでも代入の前に参照が出てくるし
785 名前:デフォルトの名無しさん mailto:sage [2016/02/20(土) 00:57:58.12 ID:OTE8dQpJ.net] そうでしたか、新発見でなかった
786 名前:デフォルトの名無しさん mailto:sage [2016/02/20(土) 15:01:09.40 ID:91Q+YYwH.net] 代入前にうっかり参照してしまうのは稀に良くある。
787 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 01:02:06.47 ID:Atbyv4Wk.net] IGNORECASE=1 をBEGIN の前に置いてもエラーにならず、不可解動作 セキュリティ的にやばくないの
788 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 02:01:41.85 ID:2mMmSiU+.net] >>778 BEGIN セクションを先頭に書けとは何処にも書いてない。 BEGIN を最後に書いても END を最初に書いても問題は無い。 何処に書いても、実際には先頭行読み込み前、各行読み込み時、最終行読み込み後にそれぞれ パターンマッチが行われている。 ただマッチする条件が特殊だから、先頭か最後でしか中の文が実行されないだけ。
789 名前:デフォルトの名無しさん [2016/03/29(火) 09:03:58.15 ID:/c8bAcK4.net] サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足 サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題 春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残 コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題 マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了 校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント 高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
790 名前:awk命 [2016/05/10(火) 10:11:56.15 ID:qP72K9YB.net] mawk32.exeで「multibyte char」のメッセージがでて困ってます、何が原因でしょう? 抑止する方法はありますか? multibyte指定のコマンドラインオプションは無いようなのですが?
791 名前:デフォルトの名無しさん mailto:sage [2016/05/10(火) 13:22:33.71 ID:pT7b4QGj.net] UTF-8 が使えないのかも 「mawk multibyte char」で検索!
792 名前:awk命 [2016/05/11(水) 00:10:08.64 ID:EkexSAUH.net] >782 データもプログラムもSJISです。 何に反応して multibyte charが出続けるのか不明です。 gawk高速なので満足なのですが、STDERRに multibyte charがで続けるのでうざいし、この出力ぶんだけ速度も低下?
793 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 00:13:30.76 ID:Qn6YFszJ.net] 入力にSJISでない文字が混在していることない? nkf -s 入力ファイル | awk で変換したら
794 名前:デフォルトの名無しさん mailto:age [2016/05/11(水) 03:47:08.47 ID:6KznZIvs.net] コードを教えて下さい。 チャレンジしましたが、これではダメです。。 (for i=1, i<=NF, i++){ if $i<0{$i=0} } print $0 したいことは、下記のような行列の数字があって、負の値をゼロに置換したいです。 ▼元の行列 3 15 6 1 -5 4 0 2 8 9 -7 11 ▼やりたい変換
795 名前:繧フ行列イメージ 3 15 6 1 0 4 0 2 8 9 0 11 [] [ここ壊れてます]
796 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 04:14:37.49 ID:gi9ycYMA.net] 構文がぜんぜん駄目。 {for(i=1;i<=NF;i++)if($i<0){$i=0};print $0;} 「したいことは、〜したいです。」の構文も駄目。典型的なねじれ文。
797 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 07:39:07.59 ID:E3fj3Ww+.net] Ruby, Python などを使えば?
798 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 12:31:52.37 ID:ZhRn3EDd.net] >>787 Ruby, Python スクリプトを提示してみろよ。
799 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 22:58:11.78 ID:Lckmn9CP.net] >>786 ありがとうございます!出来ました! (一行プログラミング!awk便利ですね)
800 名前:デフォルトの名無しさん mailto:sage [2016/05/13(金) 01:56:22.83 ID:VtzDMLxe.net] awk じゃなくてもいいんなら $ sed 's/-[0-9][0-9]*/0/g' ... GNU sed なら $ sed -r 's/-[0-9]+/0/g' ... でええんちゃう?
801 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 11:25:33.91 ID:ddY9aluRD] switchないのね
802 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 00:21:13.08 ID:X+fwM1CQ.net] かまぷ 「『シェル芸』に効く AWK処方箋」 エイホ先生「AWKって使い捨ての言語(中略)プラスアルファの処理がやりたいよね。 ただその処理はとても簡単な処理でいい。そこに対して新しいプログラム言語を作っていきたい」 AWKブーム第1世代は「アイドル辞書」で学んだ――日本GNU AWKユーザー会 斉藤さん (1/5):CodeZine(コードジン) codezine.jp/article/detail/9478 2016/06/15 14:00
803 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 23:46:54.12 ID:P+7nG182.net] やたらと続きは登録して読めと言われてもなあ。 このスレが立った頃からJGAUCのHPが更新されていないってのも凄い。
804 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 09:20:46.26 ID:2q8s4uQl.net] Windows版のgawkで遊んでたら for (i=0; i<n; i++) より for (i=0; i<n; i+=1) のほうが 実行時間が短くなることに気づいた なんだこりゃ
805 名前:デフォルトの名無しさん [2016/09/13(火) 23:56:36.77 ID:mfLTwPLq.net] for(i=1;i<=1000000;i++){a[i]=1} と for(i=1;i<=1000000;i++){a[i]=sprintf("1")} 結果は同じはずなのに、後者は異常にメモリを食う!ふしぎ!
806 名前:デフォルトの名無しさん [2016/09/14(水) 00:22:19.58 ID:YCeX8Gov.net] 同じじゃないぞ。数値と文字列だ。 ところで、君が使ってる awk はどれ? apropos awk ってやってみたら、こんなん出てきた。 gawk (1) - パターン検索・処理言語 igawk (1) - インクルードファイルを使う gawk a2p (1) - Awk to Perl translator awk (1) - pattern scanning and text processing language English (3perl) - use nice English (or awk) names for ugly punctuation v... mawk (1) - pattern scanning and text processing language nawk (1) - pattern scanning and text processing language
807 名前:デフォルトの名無しさん [2016/09/14(水) 22:01:59.31 ID:DqYC5LBT.net] >>796 例が悪くてスマソ、Cygwin上でgawk4.1.4使って for(i=1;i<=1000000;i++){a[i]="1"} と for(i=1;i<=1000000;i++){a[i]=sprintf("1")} でループ脱出直後のメモリ使用量を比較すると 上が60MBytes、下が600MBytesとかになった cmdで動くgawkの3.1.7でも同じような差がでた Linuxは試していないけど、もし大丈夫ならWindows版の問題かも
808 名前:デフォルトの名無しさん mailto:sage [2016/09/14(水) 22:50:10.30 ID:PWB0Awgu.net] >>797 OSX El Capitan gawk 4.1.4 それぞれBEGIN{}に入れたスクリプトを読み込ませて実行。 で前者数十MB、後者3GB超までメモリ使った(アクティビティモニタ)。
809 名前:795 [2016/09/14(水) 23:40:38.22 ID:YCeX8Gov.net] やってみたよ。環境は Debian jessie。 テストプログラム #!/usr/bin/perl -w use strict; { my $do_ps = 'system("ps p $PPID o pid,sz,args")'; foreach ( 1,'sprintf("1")'){ system('gawk',"BEGIN { for(i=1;i<=1000000;i++){a[i]=$_} $do_ps;}"); } } 実行結果 PID SZ COMMAND 7389 7693 gawk BEGIN { for(i=1;i<=1000000;i++){a[i]=1} system("ps p $PPID o pid,sz,args");} PID SZ COMMAND 7392 158116 gawk BEGIN { for(i=1;i<=1000000;i++){a[i]=sprintf("1")} system("ps p $PPID o pid,sz,args");} KB 単位らしいから 8MB と 160MB 。ただごとじゃない差だね。 1 を "1" に変更してもこんな感じだから数値と文字列の差というわけではなさそう。