腐っても鯛? 騏も老いては駑馬に劣る?
三人の碩学が生み出したスクリプト言語AWKについて語るスレ
◆ 前スレ
awkについて語るスレ
http://pc10.2ch.net/test/read.cgi/tech/1023556171/
◆ 関係スレ
シェルスクリプト相談室
http://pc10.2ch.net/test/read.cgi/tech/1112553783/
AWKでCGI
http://pc10.2ch.net/test/read.cgi/php/1171804314/
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://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/
awkについて語るスレ $2
レス数が1000を超えています。これ以上書き込みはできません。
2007/02/23(金) 23:55:42
2007/02/24(土) 00:04:13
awking shoes
2007/02/24(土) 00:24:49
オーク
オーク
オーク
奥さん
オーク
オーク
奥さん
2007/02/24(土) 01:35:13
2007/02/24(土) 23:32:05
いや多くを語ってくれ
6デフォルトの名無しさん
2007/02/25(日) 06:34:37 ローカル変数、。
7デフォルトの名無しさん
2007/02/27(火) 21:39:18 クロージャを持ったawk実装とかないかね
8デフォルトの名無しさん
2007/02/27(火) 23:45:59 コマンドプロンプトでちょちょっと使うことは頻繁にあるけど
気合い入れてプログラミングするってのは最近無くなった。
気合い入れてプログラミングするってのは最近無くなった。
2007/02/28(水) 00:13:16
>>7
前スレにObjective awkが実在するかのような話があるがネタだろう。
実用性を無視すればawk自身で書くことも不可能ではないかもしれない。
お望みに一番近い実装は、実はJavaScriptではないかと。
http://developer.mozilla.org/ja/docs/New_in_JavaScript_1.7
前スレにObjective awkが実在するかのような話があるがネタだろう。
実用性を無視すればawk自身で書くことも不可能ではないかもしれない。
お望みに一番近い実装は、実はJavaScriptではないかと。
http://developer.mozilla.org/ja/docs/New_in_JavaScript_1.7
2007/03/01(木) 00:43:46
トッパンのプログラミング言語AWKがブックオフで105円で叩き売られてるのを見て
なんか悲しい気分になった
なんか悲しい気分になった
2007/03/01(木) 16:01:47
>>10
俺もオライリーの「sed & awk プログラミング」本が、図書館の「無料で持ってけー棚」
にあったので、即 GET した。まあ、かなり古い本(1991 年)だけど、内容はいい本だ。
定価 \3800 円のバカ高本で、 たぶん、新書では買わなかっただろう。
トッパンのプログラミング言語AWKって、いつごろの本だったけ。とりあえず、105円なら
欲しいっす。
俺もオライリーの「sed & awk プログラミング」本が、図書館の「無料で持ってけー棚」
にあったので、即 GET した。まあ、かなり古い本(1991 年)だけど、内容はいい本だ。
定価 \3800 円のバカ高本で、 たぶん、新書では買わなかっただろう。
トッパンのプログラミング言語AWKって、いつごろの本だったけ。とりあえず、105円なら
欲しいっす。
2007/03/01(木) 21:49:42
1311
2007/03/01(木) 23:52:54 >>12
> 赤い表紙の第1版だねきっと。
そう、それそれ。 ほんで、
gensub がない。もちろん、
/inet/..... |& .... もない。
最近、/inet/..... |& .... がある(gawk3.1 から)ことを知って、gawk を見直している。
使い捨てのプログラムは gawk に汁!!。
> 赤い表紙の第1版だねきっと。
そう、それそれ。 ほんで、
gensub がない。もちろん、
/inet/..... |& .... もない。
最近、/inet/..... |& .... がある(gawk3.1 から)ことを知って、gawk を見直している。
使い捨てのプログラムは gawk に汁!!。
2007/03/02(金) 02:09:03
>>11
トッパンの最初の本なら確か1990年の春頃だったと思う。
一応nawkレベルの記述のはずなんで、gawkなんかの固有の
拡張を除けば十分使えるでしょ。
105円は…ちと悲しいけどいい人に拾われて欲しいねえ。
トッパンの最初の本なら確か1990年の春頃だったと思う。
一応nawkレベルの記述のはずなんで、gawkなんかの固有の
拡張を除けば十分使えるでしょ。
105円は…ちと悲しいけどいい人に拾われて欲しいねえ。
2007/03/02(金) 02:27:22
2007/03/04(日) 00:06:22
2007/03/04(日) 00:24:42
http://www.gnu.org/software/gawk/manual/gawkinet/gawkinet.html#Web-page
から、簡単な例。
BEGIN {
RS = ORS = "\r\n"
HttpService = "/inet/tcp/0/www.yahoo.com/80"
print "GET http://www.yahoo.com" |& HttpService
while ((HttpService |& getline) > 0)
print $0
close(HttpService)
}
から、簡単な例。
BEGIN {
RS = ORS = "\r\n"
HttpService = "/inet/tcp/0/www.yahoo.com/80"
print "GET http://www.yahoo.com" |& HttpService
while ((HttpService |& getline) > 0)
print $0
close(HttpService)
}
2007/03/04(日) 00:38:54
awkでSQLのleftjoinみたいなことできる?
2007/03/04(日) 01:55:43
2015
2007/03/04(日) 03:46:242007/03/04(日) 03:55:11
エンコーディング対応とか色々考えると、awkでHTMLを処理しようとするほうが
無理がある感じ。
素直にPではじまる言語とか使っとけば?みたいな。
無理がある感じ。
素直にPではじまる言語とか使っとけば?みたいな。
2219
2007/03/04(日) 04:55:31 >>21
PとかR使えってのはまあそうなんだけど、HTMLの妥当性とかエンコーディングを気にしないで
いい使い道で考えてた(個人的にそういう需要がある)のでね。
HTMLに関してはきちんとしたドキュメントならxgawkでどうにかなる?
PとかR使えってのはまあそうなんだけど、HTMLの妥当性とかエンコーディングを気にしないで
いい使い道で考えてた(個人的にそういう需要がある)のでね。
HTMLに関してはきちんとしたドキュメントならxgawkでどうにかなる?
2007/03/14(水) 16:26:36
昔、Fortran、Cぐらいしか知らなかった時、
「えっ、こんな数行で計算出来るの?」
「プログラム内にファイル名書かなくて良いの?」
「この数行で、すべてのデータの計算してくれるの?」
って、驚きながら友人に教えてもらいました。
今なら、Excelでするような計算はすべてawkでしてました。
アスキーから256倍シリーズが出たぐらいだから
注目の言語だったんだよね。
「えっ、こんな数行で計算出来るの?」
「プログラム内にファイル名書かなくて良いの?」
「この数行で、すべてのデータの計算してくれるの?」
って、驚きながら友人に教えてもらいました。
今なら、Excelでするような計算はすべてawkでしてました。
アスキーから256倍シリーズが出たぐらいだから
注目の言語だったんだよね。
2007/03/14(水) 16:40:22
Visicalcと1-2-3はawkブームより昔からあったんだけどね。
UNIXって意外と古くないんだよね。
UNIXって意外と古くないんだよね。
2007/04/14(土) 08:00:42
>10
発行所が新紀元社の「プログラミング言語AWK」を2005年に定価3465円(税込)で買いました。
奥付に「本書は1989年11月に株式会社トッパンより発行されました。この度、株式会社新紀元社より、原出版社、訳者の許可を得て再発行いたしました。」と書かれています。
発行所が新紀元社の「プログラミング言語AWK」を2005年に定価3465円(税込)で買いました。
奥付に「本書は1989年11月に株式会社トッパンより発行されました。この度、株式会社新紀元社より、原出版社、訳者の許可を得て再発行いたしました。」と書かれています。
2007/04/14(土) 09:43:47
新紀元社ってRPGの本しか出してないと思ってたから意外だ。
2007/04/14(土) 13:42:47
大昔に通ってた高専の土木工学科にはawkの授業があった
実験のデータ処理にでも使ってほしかったんだろう
実験のデータ処理にでも使ってほしかったんだろう
2007/04/16(月) 17:34:08
>24
awkブームは、西暦だと何年頃でしょうか?
awkブームは、西暦だと何年頃でしょうか?
2007/04/17(火) 00:31:15
3028
2007/04/17(火) 08:45:33 >29
御回答ありがとうございます。
御回答ありがとうございます。
2007/05/04(金) 21:28:49
最近の情報は、こちら!
ttp://gauc.no-ip.org/
ttp://gauc.no-ip.org/
2007/07/14(土) 08:27:58
鬼車awkを誰か作ってくれないかなー
2007/07/15(日) 03:17:40
2007/09/03(月) 08:59:45
あとローカル変数が欲しいな
2007/09/03(月) 10:30:14
functionの中はローカル変数になるよ。
2007/09/04(火) 00:12:17
いつから?未だに引数に並べるもんだと。
2007/09/04(火) 09:33:02
あー、ごめん、引数並べたやつがローカル変数になる。だった。
先に宣言すればいいんだから別によくね?
先に宣言すればいいんだから別によくね?
2007/09/09(日) 04:42:02
キモいやん。そのやり方。
39デフォルトの名無しさん
2007/09/14(金) 04:37:24 これからawkを勉強します。
2007/09/14(金) 09:05:13
awkを学ぶことになるでしょう。
41デフォルトの名無しさん
2007/09/15(土) 01:03:04 みなさんawkは語らないのですね。
2007/09/15(土) 10:28:44
船頭awkして船山に登る。
2007/09/16(日) 03:03:51
人に言えるほどawk知ってる訳でも無いし
2007/09/16(日) 10:27:22
だけど人の話は聞きたいし
2007/09/17(月) 18:12:15
awkぼ利通
46cat.awk
2007/09/19(水) 08:55:44 1
47デフォルトの名無しさん
2007/09/19(水) 16:41:49 awkを勉強しているのですが、Perlに慣れているからか
awkでできることはPerlでワンライナーでやったほうが(少なくとも自分にとっては)速い気がしてなりません。
これについてawk熟練者である皆様はいかがお考えになりますか?
こういう時はawkのほうが便利!という例にはどんなものがありますか?
awkでできることはPerlでワンライナーでやったほうが(少なくとも自分にとっては)速い気がしてなりません。
これについてawk熟練者である皆様はいかがお考えになりますか?
こういう時はawkのほうが便利!という例にはどんなものがありますか?
48デフォルトの名無しさん
2007/09/19(水) 16:43:11 ↑あっ速いというのは、コードを書くのが速いという意味です。
2007/09/19(水) 16:48:06
>>47
perl はなくても awk なら入っている事がある
perl はなくても awk なら入っている事がある
2007/09/19(水) 16:53:58
「コードを書くのが速い」という基準で、
「こういう時はawkのほうが便利」という例を他人に挙げさせても、
それはその人間にとっての速い気がする便利さであって、
意味のある一般的な議論にならないのではないか?
「こういう時はawkのほうが便利」という例を他人に挙げさせても、
それはその人間にとっての速い気がする便利さであって、
意味のある一般的な議論にならないのではないか?
2007/09/19(水) 16:57:51
PerlもRubyもPythonも使うけど、特定のカラムだけに興味があるケースは
無意識にawkを使うこともある。
perl -a とか cutしてpasteとかもあるけど。
無意識にawkを使うこともある。
perl -a とか cutしてpasteとかもあるけど。
52デフォルトの名無しさん
2007/09/19(水) 18:19:272007/09/19(水) 19:55:33
>>52
シェルスクリプトの中で、貧弱なシェルの計算能力を
補うために、ツールボックスの一つとして使われることが多い。
ので、シェルスクリプトを書く機会が多いのなら、やっておいて
損は無いと思うが、フットプリントが多少デカイこととやや移植性に
欠けることを気にしなければ、別にPerl使ったっていいわけだ
(どうせ今なら大抵は使えるだろうし、awkにしても一応Posix標準だが
色々変種がある)。
ま、単に便利なスクリプト言語が欲しいだけなら、今更awkをやる意味は
ほとんどないだろう。
フィールド分割だけならperl -aでawkの真似ができるしな。
シェルスクリプトの中で、貧弱なシェルの計算能力を
補うために、ツールボックスの一つとして使われることが多い。
ので、シェルスクリプトを書く機会が多いのなら、やっておいて
損は無いと思うが、フットプリントが多少デカイこととやや移植性に
欠けることを気にしなければ、別にPerl使ったっていいわけだ
(どうせ今なら大抵は使えるだろうし、awkにしても一応Posix標準だが
色々変種がある)。
ま、単に便利なスクリプト言語が欲しいだけなら、今更awkをやる意味は
ほとんどないだろう。
フィールド分割だけならperl -aでawkの真似ができるしな。
54デフォルトの名無しさん
2007/09/19(水) 20:06:522007/09/19(水) 21:00:04
awkとperl、処理速度はどっちが速いんだろ?
ってオマエが試せって言われそうだけどふと思ったんで書いてみた。
ってオマエが試せって言われそうだけどふと思ったんで書いてみた。
2007/09/19(水) 22:17:45
awkは処理系多いからなぁ
何の処理かにもよるだろうし
何の処理かにもよるだろうし
2007/09/19(水) 23:45:00
どちらも得意とする単純なテキストのフィルタリング処理なら、
I/O速度で制限されるのでどちらでも(或いはsedを持ち出しても)大して変わらないと思う。
awkの真骨頂は一行野郎にあると思う私は、こんなのをよく書き捨てる。
--
awk 'BEGIN {print 1+2*3-4;}'
ls -l /tmp|awk '$5>0'
ls -l |awk '{sum+=$5;} END{print sum;}'
I/O速度で制限されるのでどちらでも(或いはsedを持ち出しても)大して変わらないと思う。
awkの真骨頂は一行野郎にあると思う私は、こんなのをよく書き捨てる。
--
awk 'BEGIN {print 1+2*3-4;}'
ls -l /tmp|awk '$5>0'
ls -l |awk '{sum+=$5;} END{print sum;}'
2007/09/19(水) 23:51:16
PerlにたいするAwkの現実的メリットはメモリ消費が少ないことくらいで
これは今の計算機では微々たる問題だ。
ESRのArt of UNIX Programmingを立ち読みしたら
Awkがメモリ節約のために仕様を制限したことが
早期に競争力をなくした理由と論じていた。
バッドな言語設計の見本って感じで、ちと不愉快だった
これは今の計算機では微々たる問題だ。
ESRのArt of UNIX Programmingを立ち読みしたら
Awkがメモリ節約のために仕様を制限したことが
早期に競争力をなくした理由と論じていた。
バッドな言語設計の見本って感じで、ちと不愉快だった
2007/09/22(土) 02:28:36
>>57
俺も時々やる。
その時は便利!と思って.cshrcとかにalias登録するけどすぐに忘れて同じ内容を手打ちしてたりする
その挙句にこれは便利!と思って.cshrc開くと既に登録してあるという…
俺も時々やる。
その時は便利!と思って.cshrcとかにalias登録するけどすぐに忘れて同じ内容を手打ちしてたりする
その挙句にこれは便利!と思って.cshrc開くと既に登録してあるという…
2007/09/22(土) 09:21:37
>>59
全俺が共感した。
全俺が共感した。
2007/09/24(月) 12:01:33
(.cshrcを.bashrcに置き換えて) 俺も同じ経験がある。
2007/09/28(金) 00:37:50
「一行野郎」は名訳
2007/09/28(金) 01:20:24
むかし、「読書するプログラマ」をよんで、awkで会計をするのがかっこ良いと
おもってました。
でも確定申告をする身になったらEXCELを使っている。
「エンジニアのための事務作業 sed awk grep そしてTex」なんて書籍があれば食いつくのに...
おもってました。
でも確定申告をする身になったらEXCELを使っている。
「エンジニアのための事務作業 sed awk grep そしてTex」なんて書籍があれば食いつくのに...
2007/09/28(金) 02:53:12
awkで会計用スクリプトを書くより、会計のしくみを理解することの方が
俺には遥かに難しい
俺には遥かに難しい
2007/09/28(金) 14:47:04
2007/10/02(火) 02:19:46
Perl はコード一目見て俺がcore吐きそうになる
2007/10/02(火) 07:50:30
任意に core が吐けたら便利だよな。日記代わりになる。
2007/10/02(火) 08:00:10
69デフォルトの名無しさん
2007/10/03(水) 23:18:59 awkってなんでPerl風に正規表現置換できるようにならんの。独自拡張でもいいんだけどな。
2007/10/04(木) 02:48:29
2007/10/04(木) 21:53:48
awkはDFAでperlはNFAだっけか?
2007/10/05(金) 02:45:00
73デフォルトの名無しさん
2007/11/22(木) 06:36:33 xgawkで多倍長整数を使いたいんですが、
printf( "%ld\n", num );
では桁数は増えても精度は上がってないようです。
型宣言するにはどうするのでしょうか
printf( "%ld\n", num );
では桁数は増えても精度は上がってないようです。
型宣言するにはどうするのでしょうか
2007/11/22(木) 07:17:23
>>73
多倍長整数を実装するのに個別の精度を上げてどうする。
多倍長整数を実装するのに個別の精度を上げてどうする。
2007/11/22(木) 07:34:48
xgawkは多倍長整数あるんですよね?
で、rubyのように無宣言で使えるかと思ったらそうではないらしいので、
どうするのかと。
http://home.vrweb.de/~juergen.kahrs/gawk/XML/xmlgawk.html
いまこのへん見てるんですが
で、rubyのように無宣言で使えるかと思ったらそうではないらしいので、
どうするのかと。
http://home.vrweb.de/~juergen.kahrs/gawk/XML/xmlgawk.html
いまこのへん見てるんですが
2007/11/22(木) 08:47:49
MPFR,多倍長整数ではなく実数かな。
ググって見つけました。
http://www.kt.rim.or.jp/~kbk/zakkicho/zakkicho7.html#D060126
http://golf.shinh.org/p.rb?Factorial
実はこれやってるんですが。
あとはdllのパスが分かれば・・・
ググって見つけました。
http://www.kt.rim.or.jp/~kbk/zakkicho/zakkicho7.html#D060126
http://golf.shinh.org/p.rb?Factorial
実はこれやってるんですが。
あとはdllのパスが分かれば・・・
2007/11/26(月) 21:13:28
2007/11/29(木) 08:00:03
そうですか
どちらにしても実数って事はやっぱ無理な気がしました
どちらにしても実数って事はやっぱ無理な気がしました
2008/01/04(金) 07:28:20
sedみたいに、パターン部分を行番号で指定出来ませんか?
2008/01/04(金) 09:32:19
2008/01/04(金) 14:24:54
>80
はじめsedみたいに 10,35{ みたいな感じに書いてダメだったので; }
普通に比較式書くんですね。10<=NR&&NR<=35{ で出来ました; }
ありがとうございます。
はじめsedみたいに 10,35{ みたいな感じに書いてダメだったので; }
普通に比較式書くんですね。10<=NR&&NR<=35{ で出来ました; }
ありがとうございます。
2008/01/05(土) 00:50:26
2008/01/14(月) 09:02:50
awk はオプションなしだとワンライナーのコードを書くことになると思いますが
実際 awk のワンライナーってどんな時に使いますか?
あまり見たことがなくて…
実際 awk のワンライナーってどんな時に使いますか?
あまり見たことがなくて…
2008/01/14(月) 09:45:08
>>83
UNIXでは多くのファイルや出力が欄区切りテキストの形式になっているから
その場使い捨てワンライナーが本来の使い方なんだけど、
他のOSだと BEGIN を main 代わりに使うようなのばっかになるかもね。
UNIXでは多くのファイルや出力が欄区切りテキストの形式になっているから
その場使い捨てワンライナーが本来の使い方なんだけど、
他のOSだと BEGIN を main 代わりに使うようなのばっかになるかもね。
2008/01/14(月) 09:46:06
>>83がsedをどう使っているのか気になる。
sedスクリプトファイルとか作って、スクリプトの引数に処理対象のファイルを渡してたりするのかな。
sedスクリプトファイルとか作って、スクリプトの引数に処理対象のファイルを渡してたりするのかな。
2008/01/14(月) 10:18:29
よく書く一行野郎。
--
du -sk /tmp/* | awk '{sum += $1;} END {print sum / NR;}'
# まぁ、duってのは今思いついただけで、実際にduの出力の平均を取ることはないけどね。
--
paste foo bar | awk '($1 - $2) > 1e-3 || ($1 - $2) < -1e-3 {print NR, $0;}'
# 一致を見るだけならdiffでいいけど、近似を見るには使えないんで。
--
du -sk /tmp/* | awk '{sum += $1;} END {print sum / NR;}'
# まぁ、duってのは今思いついただけで、実際にduの出力の平均を取ることはないけどね。
--
paste foo bar | awk '($1 - $2) > 1e-3 || ($1 - $2) < -1e-3 {print NR, $0;}'
# 一致を見るだけならdiffでいいけど、近似を見るには使えないんで。
2008/01/15(火) 18:34:44
2008/01/15(火) 18:59:18
あ、コード書きそうなのは後者です。
平均とか合計みたいなモノには良さそうですね。
平均とか合計みたいなモノには良さそうですね。
2008/01/15(火) 19:28:50
今日書いた一行野郎。
--
awk '{for (ic = 1; ic <= NF; ++ic) {if (max < $ic) max = $ic;}} END {print max;}'
--
これも全フィールドに拡張しているだけで、単に最大値を得ているだけだね。
--
awk '{for (ic = 1; ic <= NF; ++ic) {if (max < $ic) max = $ic;}} END {print max;}'
--
これも全フィールドに拡張しているだけで、単に最大値を得ているだけだね。
90デフォルトの名無しさん
2008/01/22(火) 16:52:32 よく書く一行
du -k|awk '$1 > 10000'
でかいデレクトリをさがす
du -k|awk '$1 > 10000'
でかいデレクトリをさがす
2008/01/29(火) 23:34:51
俺がよく書く一行野郎
$ awk 1 > hoge.sh
$ awk 1 > hoge.sh
2008/01/31(木) 12:58:14
2008/01/31(木) 18:48:07
>92
Windowsにawk入れてた時に、こんなヘンな癖が付いてしまった。
Windowsにawk入れてた時に、こんなヘンな癖が付いてしまった。
94デフォルトの名無しさん
2008/02/02(土) 12:38:28 すみません、初心者ですがawkに関するスレがここしかなかったので。
↓のソースを書いていただいたのですが、いったいどうすれば使えるのでしょうか?
ちなみに、これはフォルダ内のWinrar形式ファイルのリカバリレコードが付いているか否か
リストを一括で出力するものです。
よろしこ
**************
コマンドラインだけどunrar lt sample.rarの出力利用してリストを作るだけ
使い方はパイプでawkに渡して処理unrar lt *.rar | gawk -f rr.awk
awkなんか入ってないだろうから当然そのままじゃ動かない
rr.awk
#!/usr/local/bin/gawk
BEGIN {$rr=0; printf "%-30s\t%s\n", "FileName", "RecoveryRecord";}
{if($1=="Solid" && $2=="archive"){
for(i=3;i<=NF;i++) printf "%-30s ",$i;printf "\t";getline;getline;
if($0=="Recovery record is present"){printf "Yes / ";
for(;;){getline;if($0=="Data header type: RR"){getline;printf "%sbyte\n",$2;break;}}
}else printf "No\n";}}
↓のソースを書いていただいたのですが、いったいどうすれば使えるのでしょうか?
ちなみに、これはフォルダ内のWinrar形式ファイルのリカバリレコードが付いているか否か
リストを一括で出力するものです。
よろしこ
**************
コマンドラインだけどunrar lt sample.rarの出力利用してリストを作るだけ
使い方はパイプでawkに渡して処理unrar lt *.rar | gawk -f rr.awk
awkなんか入ってないだろうから当然そのままじゃ動かない
rr.awk
#!/usr/local/bin/gawk
BEGIN {$rr=0; printf "%-30s\t%s\n", "FileName", "RecoveryRecord";}
{if($1=="Solid" && $2=="archive"){
for(i=3;i<=NF;i++) printf "%-30s ",$i;printf "\t";getline;getline;
if($0=="Recovery record is present"){printf "Yes / ";
for(;;){getline;if($0=="Data header type: RR"){getline;printf "%sbyte\n",$2;break;}}
}else printf "No\n";}}
2008/02/02(土) 13:01:48
それを動かすにはまず gawk をどこかから入手する。
2008/02/02(土) 17:48:45
>>94
>↓のソースを書いていただいたのですが、
書いた人に聞く。
と答えると、わけのわからん理由を言ってごねるだろうから、
先に言っとくと、そんな見苦しい言い訳するな。
どうせ答えたって、今度は○○がわかりませんとか言い出すんだろ?
どっかからgawkを落として展開しろよ。全く、一生ググってろよカス
"C:\Program Files\WinRAR\UnRAR.exe" lt *.rar | "gawkのフルパス" -f rr.awk
>↓のソースを書いていただいたのですが、
書いた人に聞く。
と答えると、わけのわからん理由を言ってごねるだろうから、
先に言っとくと、そんな見苦しい言い訳するな。
どうせ答えたって、今度は○○がわかりませんとか言い出すんだろ?
どっかからgawkを落として展開しろよ。全く、一生ググってろよカス
"C:\Program Files\WinRAR\UnRAR.exe" lt *.rar | "gawkのフルパス" -f rr.awk
2008/02/10(日) 19:16:33
すいません、あるテキストを{print $1,$2}として抽出して
aaa 1
aaa 2
aaa 3
bbb 1
bbb 2
ccc 1
ccc 4
...
とまではできたんですが、並んでいるデータをそれぞれ、
aaa 6
bbb 3
ccc 5
と集計したいんですが、どのようにすればいいでしょうか?
aaa 1
aaa 2
aaa 3
bbb 1
bbb 2
ccc 1
ccc 4
...
とまではできたんですが、並んでいるデータをそれぞれ、
aaa 6
bbb 3
ccc 5
と集計したいんですが、どのようにすればいいでしょうか?
2008/02/10(日) 19:28:07
awk '{count[$1] += $2;} END{for (aaa in count) {print aaa count[aaa]}}'
あとはソートすればいいはず
あとはソートすればいいはず
9997
2008/02/10(日) 20:22:03 >98さん、ありがとうございます!
情けないのですが、今まで便利なツールに頼っていて全然コマンドについて理解できていなかったので困っていました。
実はメールログで送信者がどれだけの通数を送信してるかを確かめるためにコマンドでできないか、で>97でつまづいていました。
何とか途中までできたんですが、非常にスーパーエレガントな1行コードでして…。
質問ついでで申し訳ないのですが、
(aaa in count) {print aaa count[aaa]}
のaaaについてはどう解釈すればいいのでしょうか?
情けないのですが、今まで便利なツールに頼っていて全然コマンドについて理解できていなかったので困っていました。
実はメールログで送信者がどれだけの通数を送信してるかを確かめるためにコマンドでできないか、で>97でつまづいていました。
何とか途中までできたんですが、非常にスーパーエレガントな1行コードでして…。
質問ついでで申し訳ないのですが、
(aaa in count) {print aaa count[aaa]}
のaaaについてはどう解釈すればいいのでしょうか?
100デフォルトの名無しさん
2008/02/10(日) 20:33:27 >>99
bashとかのforとかと同じで適当な文字列ならなんでもいいです.例に出てきたaaaなんかにするからややこしくなってすみません.
for(hoge in list) {...}
で配列listのキーを片っ端からhogeに入れてループするって意味になるはずですよ.
bashとかのforとかと同じで適当な文字列ならなんでもいいです.例に出てきたaaaなんかにするからややこしくなってすみません.
for(hoge in list) {...}
で配列listのキーを片っ端からhogeに入れてループするって意味になるはずですよ.
101デフォルトの名無しさん
2008/02/10(日) 20:36:22 98じゃないけど
awk '{count[$1] += $2;} END{for (i in count) {printf "%s %i\n", i, count[i]}}'
こうやって書けばしんせつじゃね?
データの中のaaaとloopカウンターのaaaを同じ名前にするのは意地悪だと思うよ
awk '{count[$1] += $2;} END{for (i in count) {printf "%s %i\n", i, count[i]}}'
こうやって書けばしんせつじゃね?
データの中のaaaとloopカウンターのaaaを同じ名前にするのは意地悪だと思うよ
102デフォルトの名無しさん
2008/02/10(日) 20:37:23 101です。すまんonz
103≠98
2008/02/10(日) 20:39:44 あー、みんな書いているから私の書いたのは大幅に削るか。
そのENDブロック内は、
for (制御変数 in 連想配列) {...;}
というパターン。
その前段のcount[$1] += $2は一行目のとき
count["aaa"] += 1と解釈される。以下同様に。
このcountが連想配列として使われているということ。
そのENDブロック内は、
for (制御変数 in 連想配列) {...;}
というパターン。
その前段のcount[$1] += $2は一行目のとき
count["aaa"] += 1と解釈される。以下同様に。
このcountが連想配列として使われているということ。
104デフォルトの名無しさん
2008/02/10(日) 20:42:0510597
2008/02/10(日) 20:52:15 いえいえいえいえ…そういう意味じゃなくて教わっていながらすいませんです。
上記で書いたとおり便利ツールに頼り切ってて殆ど知らない私が悪いのですが…。
今一生懸命3byte程度の脳みそで勉強してるんですが、2日目で挫折しそうで質問させて貰いました…。
たとえばログには
Feb 9 22:44:40 localhost postfix/qmgr[1936]: 345C48C0154: from=<use1@example.com>, size=556, nrcpt=1 (queue active)
と必ず出ます。で、
1,生ログをそのまま処理するのが怖い(大きなファイル)ので、日付でログを抽出して別ファイルへ保存。
2,grepで nrcpt=と抽出して、さらにgrep -vで除外するドメインを指定して抽出
3,そしてsedでnrcpt=を削除して
4,ここで>97のように$7と$9を並べたところで脳みそのバッファエラーを起こしました。
この処理の方法もエレガントなことは分かっていますが、恥は承知でお伺いした次第です…。
上記で書いたとおり便利ツールに頼り切ってて殆ど知らない私が悪いのですが…。
今一生懸命3byte程度の脳みそで勉強してるんですが、2日目で挫折しそうで質問させて貰いました…。
たとえばログには
Feb 9 22:44:40 localhost postfix/qmgr[1936]: 345C48C0154: from=<use1@example.com>, size=556, nrcpt=1 (queue active)
と必ず出ます。で、
1,生ログをそのまま処理するのが怖い(大きなファイル)ので、日付でログを抽出して別ファイルへ保存。
2,grepで nrcpt=と抽出して、さらにgrep -vで除外するドメインを指定して抽出
3,そしてsedでnrcpt=を削除して
4,ここで>97のように$7と$9を並べたところで脳みそのバッファエラーを起こしました。
この処理の方法もエレガントなことは分かっていますが、恥は承知でお伺いした次第です…。
106デフォルトの名無しさん
2008/02/13(水) 07:31:34 gsubで[.*]を置き換えるにはどうすればいいでしょうか?
107デフォルトの名無しさん
2008/02/14(木) 02:38:02108デフォルトの名無しさん
2008/02/16(土) 01:08:44 awkで現在時刻からn分前から以降のログだけを抜き出したいんですが、どうすればいいでしょうか…。
02 15 12:34:56 xxxxxxxxx
02 15 13:45:01 xxxxxxxxx
...
...
...
とかの形式なので、strftime()とかで現在とログの時刻を比較して抜き出す、とかを試したんですがダメでした…
02 15 12:34:56 xxxxxxxxx
02 15 13:45:01 xxxxxxxxx
...
...
...
とかの形式なので、strftime()とかで現在とログの時刻を比較して抜き出す、とかを試したんですがダメでした…
109デフォルトの名無しさん
2008/02/16(土) 01:49:16 >>108 これで駄目かな?(一応 gawk 3.0.4 では動いた)
BEGIN{
n=5
basetime=strftime("%m %d %H:%M:%S", systime()-60*n)
}
{
chktime=substr($0, 1, 14)
if(chktime >= basetime) print
}
BEGIN{
n=5
basetime=strftime("%m %d %H:%M:%S", systime()-60*n)
}
{
chktime=substr($0, 1, 14)
if(chktime >= basetime) print
}
110デフォルトの名無しさん
2008/02/16(土) 02:23:28 >109
ありがとうございます…素直に目が鱗でした…。
> chktime=substr($0, 1, 14)
なんですね…
perlが使えない環境なので、これが分かればいろいろ流用効くので助かりました。
ありがとうございます。もうちょっと精進します。。。
ありがとうございます…素直に目が鱗でした…。
> chktime=substr($0, 1, 14)
なんですね…
perlが使えない環境なので、これが分かればいろいろ流用効くので助かりました。
ありがとうございます。もうちょっと精進します。。。
111デフォルトの名無しさん
2008/02/18(月) 18:58:36112デフォルトの名無しさん
2008/02/18(月) 22:32:44113デフォルトの名無しさん
2008/02/19(火) 02:59:17 >2007年5月9日 第1版第16刷発行
本屋の棚で眠り続けてたってわけじゃないのかw
本屋の棚で眠り続けてたってわけじゃないのかw
114デフォルトの名無しさん
2008/02/24(日) 00:57:13 目が鱗 に一致する日本語のページ 約 1,920 件中 1 - 20 件目 (0.24 秒)
115デフォルトの名無しさん
2008/02/24(日) 01:00:56 メガ鱗
116デフォルトの名無しさん
2008/03/28(金) 21:53:28 sed, awk, ruby を使う。
それぞれ適材適所で使うけど、
「sed だけ」「awk だけ」で済ませられると、
不思議な喜びを感じる。
それぞれ適材適所で使うけど、
「sed だけ」「awk だけ」で済ませられると、
不思議な喜びを感じる。
117デフォルトの名無しさん
2008/03/30(日) 14:05:33118デフォルトの名無しさん
2008/03/30(日) 16:22:26 古いサーバだとPerlすら入ってない事があるからawkは重宝する。
119デフォルトの名無しさん
2008/04/06(日) 10:26:45 最近のgawkがネットワークにも使えると知ってちょっと驚いたw
カーニハンの本レベル(とか256倍)しか知らない人って多いと思う。
カーニハンの本レベル(とか256倍)しか知らない人って多いと思う。
120デフォルトの名無しさん
2008/04/06(日) 12:44:41 ノーマルのawkでXMLを字下げしたりしてうまく表示させるにはどうすればいいのかな・・・
121デフォルトの名無しさん
2008/04/06(日) 17:09:18 sedだけで書けると、俺って頭イイかもって思う。
#!/bin/sed -f
#!/bin/sed -f
122デフォルトの名無しさん
2008/04/06(日) 17:16:17 文字列の単純な置換だけならawkより簡単に書けるんだけど。
awkに固執しないで臨機応変にsedを使うって意味でなら要領がいいという意味で賢いけど。
# awkで書いた方が簡単なことをsedで頑張って書いたのだとしたら、その意味では頭悪いなw
awkに固執しないで臨機応変にsedを使うって意味でなら要領がいいという意味で賢いけど。
# awkで書いた方が簡単なことをsedで頑張って書いたのだとしたら、その意味では頭悪いなw
123デフォルトの名無しさん
2008/04/06(日) 17:34:45 awkからsystemでsed呼ぶことは時々あるw
124デフォルトの名無しさん
2008/04/06(日) 18:49:04 >>24
awkって表計算のような処理に特化してますよね。
その点が非常にユニークというか事務処理の言語だな、と。
visicalc(1979)awk(1977)ですからawkのほうが若干古いんですが、
表計算はセルに直接式を書くという発想が新しかった。うむむ。
awkって表計算のような処理に特化してますよね。
その点が非常にユニークというか事務処理の言語だな、と。
visicalc(1979)awk(1977)ですからawkのほうが若干古いんですが、
表計算はセルに直接式を書くという発想が新しかった。うむむ。
125デフォルトの名無しさん
2008/04/06(日) 19:26:56 VisiCalcの考案者Dan Bricklinによるアイデアの説明
ttp://www.danbricklin.com/history/saiidea.htm
Danの電卓がHPじゃなくてTIなのが意外な感じ。
The idea for the electronic spreadsheet came to me while I was a student at the Harvard Business School, working on my MBA degree, in the spring of 1978.
Sitting in Aldrich Hall, room 108, I would daydream.
"Imagine if my calculator had a ball in its back, like a mouse..." (I had seen a mouse previously, I think in a demonstration at a conference by Doug Engelbart, and maybe the Alto).
And "..imagine if I had a heads-up display, like in a fighter plane, where I could see the virtual image hanging in the air in front of me.
I could just move my mouse/keyboard calculator around, punch in a few numbers, circle them to get a sum, do some calculations, and answer '10% will be fine!'"
(10% was always the answer in those days when we couldn't do very complicated calculations...)
ttp://www.danbricklin.com/history/saiidea.htm
Danの電卓がHPじゃなくてTIなのが意外な感じ。
The idea for the electronic spreadsheet came to me while I was a student at the Harvard Business School, working on my MBA degree, in the spring of 1978.
Sitting in Aldrich Hall, room 108, I would daydream.
"Imagine if my calculator had a ball in its back, like a mouse..." (I had seen a mouse previously, I think in a demonstration at a conference by Doug Engelbart, and maybe the Alto).
And "..imagine if I had a heads-up display, like in a fighter plane, where I could see the virtual image hanging in the air in front of me.
I could just move my mouse/keyboard calculator around, punch in a few numbers, circle them to get a sum, do some calculations, and answer '10% will be fine!'"
(10% was always the answer in those days when we couldn't do very complicated calculations...)
126デフォルトの名無しさん
2008/04/07(月) 02:52:10 はじめましてgawkの質問です
お手すきの時にでもご解答頂けましたら助かります
2chでお話していただいた方からgawkを教えて頂きました
正規表現でマッチした部分がいくつあっても全ての箇所を1アクションで保存できる優れものです
当方、言語は全く知らないので先ほどまでテスト実行しては驚いていました
この優れものを今後末永く使っていきたいのですが
下記の事項をググって見たのですがわかりませんでした
どなたかわかる方おられましたら教えて下さい
私のやりたいこと
・EUCを読み込んでS-JISを出力
・既存のテキスト末尾に追加書き込み保存
(教えて頂いたスクリプトは上書き保存なので出力先の内容が消えてしまいます)
気長に待っていますので何卒よろしくお願い致します
お手すきの時にでもご解答頂けましたら助かります
2chでお話していただいた方からgawkを教えて頂きました
正規表現でマッチした部分がいくつあっても全ての箇所を1アクションで保存できる優れものです
当方、言語は全く知らないので先ほどまでテスト実行しては驚いていました
この優れものを今後末永く使っていきたいのですが
下記の事項をググって見たのですがわかりませんでした
どなたかわかる方おられましたら教えて下さい
私のやりたいこと
・EUCを読み込んでS-JISを出力
・既存のテキスト末尾に追加書き込み保存
(教えて頂いたスクリプトは上書き保存なので出力先の内容が消えてしまいます)
気長に待っていますので何卒よろしくお願い致します
127デフォルトの名無しさん
2008/04/07(月) 03:10:31 >>126
前者はawkでやるべきことではない。iconv, nkfなどそれ専用のツールがある。
後者も必ずしもawkは不要。コマンドラインが使える環境なら普通にできる。
例えば、Unix系なら cat append.txt >> original.txt で既存のファイルに追加できる。
DOS系でも、type append.txt >> original.txt でできる。
要は、awkのいいところはそれ単体でなんでもできる(或いはできない)ことではなく、
コマンドライン環境で力を発揮するツールであること。
例えば、正規表現でマッチした文字列を置換するだけならテキストエディタでもできる。
あーそうそう、エディタがあれば文字コードの変換もそれだけでできる。
所謂テキストエディタを使ったことがないなら、一度(正規表現検索機能、
文字コード変換機能のある)テキストエディタを触ってみるといいかもしれない。
前者はawkでやるべきことではない。iconv, nkfなどそれ専用のツールがある。
後者も必ずしもawkは不要。コマンドラインが使える環境なら普通にできる。
例えば、Unix系なら cat append.txt >> original.txt で既存のファイルに追加できる。
DOS系でも、type append.txt >> original.txt でできる。
要は、awkのいいところはそれ単体でなんでもできる(或いはできない)ことではなく、
コマンドライン環境で力を発揮するツールであること。
例えば、正規表現でマッチした文字列を置換するだけならテキストエディタでもできる。
あーそうそう、エディタがあれば文字コードの変換もそれだけでできる。
所謂テキストエディタを使ったことがないなら、一度(正規表現検索機能、
文字コード変換機能のある)テキストエディタを触ってみるといいかもしれない。
128デフォルトの名無しさん
2008/04/07(月) 03:32:54129デフォルトの名無しさん
2008/04/07(月) 03:56:33 AAA.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtにペーストする
BBB.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
CCC.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
よろしくお願いします
マッチした複数箇所を一括でコピーしてTEST.txtにペーストする
BBB.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
CCC.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
よろしくお願いします
130デフォルトの名無しさん
2008/04/07(月) 04:02:07 >>127は結局awkの解答はしないのになんでしゃしゃり出てきたの?
できないじゃん
できないじゃん
131デフォルトの名無しさん
2008/04/07(月) 06:48:34132デフォルトの名無しさん
2008/04/07(月) 12:02:34 >>131
レスありがと
gawk '/東京(.+?)号室/ {print > "TEST.txt";}' AAA.txt
gawk '/東京(.+?)号室/ {print >> "TEST.txt";}' BBB.txt
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
gawk3.16では使えない?
レスありがと
gawk '/東京(.+?)号室/ {print > "TEST.txt";}' AAA.txt
gawk '/東京(.+?)号室/ {print >> "TEST.txt";}' BBB.txt
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
gawk3.16では使えない?
133デフォルトの名無しさん
2008/04/07(月) 13:29:56 >>132
DOSのコマンドラインの使い方は他所で聞いてくれ。
DOSのコマンドラインの使い方は他所で聞いてくれ。
134デフォルトの名無しさん
2008/04/07(月) 13:38:24 役所の窓口みたいな対応だな。
135デフォルトの名無しさん
2008/04/07(月) 13:43:47 DOSのコマンドラインについては多くを知らないんだよ。
136デフォルトの名無しさん
2008/04/07(月) 16:36:42 DOSの場合は空白を含む場合シングルクォートじゃダメだからな。
ダブルクォートで括って中のコードは
シングルクォートか、エスケープしてダブルクォート入れるか。
一番簡単なのは、ワンライナーでもファイルに起こしてしまうこと。
gawk -f myscript.awk AAA.txt
とやってしまえば、シングルクォートとかダブルクォートとか気にする必要はない。
ダブルクォートで括って中のコードは
シングルクォートか、エスケープしてダブルクォート入れるか。
一番簡単なのは、ワンライナーでもファイルに起こしてしまうこと。
gawk -f myscript.awk AAA.txt
とやってしまえば、シングルクォートとかダブルクォートとか気にする必要はない。
137デフォルトの名無しさん
2008/04/07(月) 18:22:15 >>132
二つ問題がある。
gawkの正規表現では.+?というのは使えない。
cmd.exeでは、シングルクォートを引数を
くくるのに使えない。
なんかよくわからんが、perlでテキストを丸飲みしてから
処理すればいいんじゃないのか?
二つ問題がある。
gawkの正規表現では.+?というのは使えない。
cmd.exeでは、シングルクォートを引数を
くくるのに使えない。
なんかよくわからんが、perlでテキストを丸飲みしてから
処理すればいいんじゃないのか?
138デフォルトの名無しさん
2008/04/12(土) 19:00:42 VisiCalc といえば、出始めの頃に TRS-80 用 を Radio Shack で見せてもらったんだけど、学生だった私には価値がわからなかったなぁ。
まぁ、これに限らず、『なんでこんなコマンドやオプションがあるんだ?』ってのは多い。
使い方じゃなく、なぜそれがあるのかを包括的に解説した本や web site ってありますか。(たとえば多くの unix コマンドを網羅しているとか)
まぁ、これに限らず、『なんでこんなコマンドやオプションがあるんだ?』ってのは多い。
使い方じゃなく、なぜそれがあるのかを包括的に解説した本や web site ってありますか。(たとえば多くの unix コマンドを網羅しているとか)
139デフォルトの名無しさん
2008/04/12(土) 19:01:22 ああ、スレ違いだった。ごめんごめん。
140デフォルトの名無しさん
2008/04/12(土) 19:58:47 なんという誤爆
141デフォルトの名無しさん
2008/05/06(火) 02:42:04 >>132 もう居ないかな。gawk3.1.6 + nkf2.0 使用@cmd.exe
C:\work>type aaa.txt (※EUCなので化ける事を確認)
、ロ、イ、ロ、イ
ナ・ケ貍シ
ナ・」イケ貍シ
ナ・」ア」ーケ貍シ
ナ・、ロ、イケ貍シ
ナ・、ユ、ャケ・ナ・ユ、ャケ貍シ
ナ・」ウケ貍シ、ネナ・」オケ貍シ
C:\work>nkf -Es AAA.txt
ほげほげ
東京号室
東京2号室
東京10号室
東京ほげ号室
東京ふが号
東ふが号室
東京3号室と東京5号室
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}"
東京号室
東京2号室
東京10号室
東京ほげ号室
東京3号室と東京5号室
既出の通り文字変換nkf(>>127) 正規表現の制約で条件変更(>>137)
実際に使う場合はこんな感じでバッチ作るとか。
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}" >>TEST.txt
C:\work>type aaa.txt (※EUCなので化ける事を確認)
、ロ、イ、ロ、イ
ナ・ケ貍シ
ナ・」イケ貍シ
ナ・」ア」ーケ貍シ
ナ・、ロ、イケ貍シ
ナ・、ユ、ャケ・ナ・ユ、ャケ貍シ
ナ・」ウケ貍シ、ネナ・」オケ貍シ
C:\work>nkf -Es AAA.txt
ほげほげ
東京号室
東京2号室
東京10号室
東京ほげ号室
東京ふが号
東ふが号室
東京3号室と東京5号室
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}"
東京号室
東京2号室
東京10号室
東京ほげ号室
東京3号室と東京5号室
既出の通り文字変換nkf(>>127) 正規表現の制約で条件変更(>>137)
実際に使う場合はこんな感じでバッチ作るとか。
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}" >>TEST.txt
142141
2008/05/06(火) 02:56:02 と、方法を書いておいてアレだけど、
秀丸使ってるならgrepの実行で検索するファイルに(現在の内容)で
検索結果からファイル名と行番号を除去するのでもできそうな気がする。
盛大にスレ違いだけど。
秀丸使ってるならgrepの実行で検索するファイルに(現在の内容)で
検索結果からファイル名と行番号を除去するのでもできそうな気がする。
盛大にスレ違いだけど。
143デフォルトの名無しさん
2008/05/06(火) 14:28:43144デフォルトの名無しさん
2008/06/16(月) 01:50:26 ひでえwwwwwwwwwwwwww
145デフォルトの名無しさん
2008/06/16(月) 01:50:57 すまん誤爆
146デフォルトの名無しさん
2008/06/25(水) 02:17:58 質問です!
以下のファイルhogeからawkで、価格を抜き出して合計値を出したいと思っています。
ファイルの内容は、書籍名と価格です。価格は一番後ろの数字になります。
----------------------
$ cat hoge
それいけ!あんぱんまん 1000
メタボリックを撃退せよ 1000
下流社会 1000
上流社会と下流社会 日本のこれから 1000
論文 2008 日本の抱える問題 1000
論文 2007 日本の抱える問題 過去問題集 1000
----------------------
難しいのが、書籍名の2008や2007などの数値が含まれていることや空白が含まれていることです。
1行目の場合2列目が価格になりますが、2行目の場合4列目が価格となります。
このように一番最後の列(価格)を取得し、合計値を計算するにはどうすればよいでしょうか?
ご教示お願いいたします。
以下のファイルhogeからawkで、価格を抜き出して合計値を出したいと思っています。
ファイルの内容は、書籍名と価格です。価格は一番後ろの数字になります。
----------------------
$ cat hoge
それいけ!あんぱんまん 1000
メタボリックを撃退せよ 1000
下流社会 1000
上流社会と下流社会 日本のこれから 1000
論文 2008 日本の抱える問題 1000
論文 2007 日本の抱える問題 過去問題集 1000
----------------------
難しいのが、書籍名の2008や2007などの数値が含まれていることや空白が含まれていることです。
1行目の場合2列目が価格になりますが、2行目の場合4列目が価格となります。
このように一番最後の列(価格)を取得し、合計値を計算するにはどうすればよいでしょうか?
ご教示お願いいたします。
147デフォルトの名無しさん
2008/06/25(水) 02:28:00 awk '{x+=$NF}END{print x}' hoge
148デフォルトの名無しさん
2008/06/25(水) 09:33:15 xじゃなくてsumとかにしようよ。
149デフォルトの名無しさん
2008/06/25(水) 13:36:51 一行野郎は手数(打数)重視なんじゃまいか
150デフォルトの名無しさん
2008/06/25(水) 15:27:28 難しいってマニュアル読めば最後の要素を指すものが何か書いてあると思うが
151デフォルトの名無しさん
2008/06/25(水) 16:09:13 読んでたら他人になんか聞きません。
152デフォルトの名無しさん
2008/06/25(水) 16:34:16 じゃあ、マニュアル読んでもわからなかったらお手上げか
153デフォルトの名無しさん
2008/06/29(日) 21:37:04 Windows 版の gawk-3.1.5 で`双方向パイプがうまく動作しません。以下、
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC182
からのサンプルファイルですが、途中で止まってしまって、返事が返ってきません。
BEGIN {
command = "sort"
n = split("abcdefghijklmnopqrstuvwxyz", a, "")
for (i = n; i > 0; i--)
print a[i] |& command
close(command, "to")
while ((command |& getline line) > 0)
print "got", line
close(command)
}
Cygwin の gawk では問題ありませんでした。
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC182
からのサンプルファイルですが、途中で止まってしまって、返事が返ってきません。
BEGIN {
command = "sort"
n = split("abcdefghijklmnopqrstuvwxyz", a, "")
for (i = n; i > 0; i--)
print a[i] |& command
close(command, "to")
while ((command |& getline line) > 0)
print "got", line
close(command)
}
Cygwin の gawk では問題ありませんでした。
154デフォルトの名無しさん
2008/07/01(火) 20:42:14 これ使うといいよ
ttp://www.pipeunish.jp/
ttp://www.pipeunish.jp/
155デフォルトの名無しさん
2008/07/02(水) 01:35:15 どうやったら Cygwin の gawk(GNU Awk 3.1.6) で print length("あいう") が 3 になるのですか?
156デフォルトの名無しさん
2008/07/02(水) 02:13:54 Windowsのバージョンくらい書こうな。でないと釣りと思われるよ
157デフォルトの名無しさん
2008/07/02(水) 08:51:57 jgawk?
158デフォルトの名無しさん
2008/07/02(水) 09:32:16 gawk.dllって、まだ誰かメンテしてくださってるんでしょうか?
最新版gawkのdllを探してるんですが、見つかりません。
または、ソースのtar.gzからdllを作る方法が載っているページを
御存知の方がいらっしゃいましたら、教えていただけると助かります。
最新版gawkのdllを探してるんですが、見つかりません。
または、ソースのtar.gzからdllを作る方法が載っているページを
御存知の方がいらっしゃいましたら、教えていただけると助かります。
159デフォルトの名無しさん
2008/07/02(水) 10:34:53 なにをいってるのかわからん
ソースのtar.gzってなに?
ソースのtar.gzってなに?
160デフォルトの名無しさん
2008/07/02(水) 10:42:47 http://ftp.gnu.org/gnu/gawk/ からダウンロードできるgawk-*.tar.gzのことですが。。
sourceからgawk.exeを作ったりしないのですか??
dllと書いているのでわかるかとは思いますが、
windows環境下での話です。普段はcygwinでmakeしたgawkを使っているのですが、
dllがあると他の言語から呼び出して使えるので便利かなーと思ってます。
sourceからgawk.exeを作ったりしないのですか??
dllと書いているのでわかるかとは思いますが、
windows環境下での話です。普段はcygwinでmakeしたgawkを使っているのですが、
dllがあると他の言語から呼び出して使えるので便利かなーと思ってます。
161デフォルトの名無しさん
2008/07/02(水) 10:45:49 cygwinはwin用のソースじゃないから
win用のソースがいる
win用のソースがいる
162デフォルトの名無しさん
2008/07/02(水) 11:53:32 >>160
昔あったDLL版は作者が独自に作ったものみたいで
本家に反映されてないから本家のソースからDLLを作るのは無理。
DLL版のソースを参考にして自力で作るか
できないなら作者に連絡して協力を求めるしかない。
昔あったDLL版は作者が独自に作ったものみたいで
本家に反映されてないから本家のソースからDLLを作るのは無理。
DLL版のソースを参考にして自力で作るか
できないなら作者に連絡して協力を求めるしかない。
163デフォルトの名無しさん
2008/07/02(水) 12:05:07 >>160
自分で改修するしかないだろ
自分で改修するしかないだろ
164デフォルトの名無しさん
2008/07/03(木) 02:36:53 (ノ∀`) アイタタタ
165155
2008/07/05(土) 15:47:31 >156
XP [Version 5.1.2600] でつ
XP [Version 5.1.2600] でつ
167デフォルトの名無しさん
2008/07/06(日) 06:36:13 うお?
作者降臨か
作者降臨か
168デフォルトの名無しさん
2008/07/06(日) 07:02:21 すんばらすぃ
169デフォルトの名無しさん
2008/07/20(日) 00:40:48 AWK 使って15年? 30年前のコードが吐き出すデータをちょこっと処理しようとして…
FS=/[ ()]+/ は期待通りの動きをせず、FS="[ ()]+" と書かねばならない。
初めて知った。
検索しても、これについて明快に書いてあるページがなかなか見つからなかったが
>正規表現定数がそれ自身として現れたとき、それはパターン中に現れたかのように、
>つまり`($0 ~ /foo/)' のようにみなされる。
<中略>
>言語のこの機能は、POSIX標準までドキュメント化されなかった。
orz
これで1時間ぐらいムダにした。私が知らなかっただけですか??
FS=/[ ()]+/ は期待通りの動きをせず、FS="[ ()]+" と書かねばならない。
初めて知った。
検索しても、これについて明快に書いてあるページがなかなか見つからなかったが
>正規表現定数がそれ自身として現れたとき、それはパターン中に現れたかのように、
>つまり`($0 ~ /foo/)' のようにみなされる。
<中略>
>言語のこの機能は、POSIX標準までドキュメント化されなかった。
orz
これで1時間ぐらいムダにした。私が知らなかっただけですか??
170デフォルトの名無しさん
2008/07/20(日) 00:58:40 『プログラミング言語AWK』には一応載ってるけどな
> (FSに代入される)文字列が1文字より長いときは,正規表現として扱われる
> (FSに代入される)文字列が1文字より長いときは,正規表現として扱われる
171デフォルトの名無しさん
2008/07/20(日) 01:10:48 ベル研系統の言語は記述の自由度はあるが挙動がつかみづらい
172デフォルトの名無しさん
2008/07/20(日) 02:09:53 >>170
””で囲んだ文字列が正規表現として扱われる ということと
//で囲んだ正規表現定数で書いてはいけない ということは同じではない。
実際、split関数の 第3引数に与える正規表現は どちらでも動く
むむむ、ここでは($0~/foo/)に置き換えて評価されないんだ…
171の意見が正しいようだね チャンチャン
””で囲んだ文字列が正規表現として扱われる ということと
//で囲んだ正規表現定数で書いてはいけない ということは同じではない。
実際、split関数の 第3引数に与える正規表現は どちらでも動く
むむむ、ここでは($0~/foo/)に置き換えて評価されないんだ…
171の意見が正しいようだね チャンチャン
173デフォルトの名無しさん
2008/07/21(月) 12:39:44 複数のファイルの読み込みってできますか?
print ファイル1の$2 ファイル2の$1
みたいな感じで
print ファイル1の$2 ファイル2の$1
みたいな感じで
174デフォルトの名無しさん
2008/07/21(月) 13:06:32 >>173
pasteで繋いじゃダメ?
私はよくやるけど。
仮にファイル1が5カラム固定なら、
paste ファイル1 ファイル2| awk '{print $2 $6;}'
てな感じで。
# カラム数可変ならもう一捻り必要だけどね。
pasteで繋いじゃダメ?
私はよくやるけど。
仮にファイル1が5カラム固定なら、
paste ファイル1 ファイル2| awk '{print $2 $6;}'
てな感じで。
# カラム数可変ならもう一捻り必要だけどね。
175デフォルトの名無しさん
2008/07/21(月) 13:50:02 >>173
awkだけでやりたいならgetlineを使えばできる。
awkだけでやりたいならgetlineを使えばできる。
176デフォルトの名無しさん
2008/07/22(火) 18:37:52 awkすごい便利で、gnuplotと組み合わせてExcelから解放されつつあります。
上の方にあったDFAとNFA使ってる事からくる違いってなんですか?
上の方にあったDFAとNFA使ってる事からくる違いってなんですか?
177デフォルトの名無しさん
2008/07/23(水) 02:40:07 >>176
一番の違いは、DFAだと後方参照ができないことかな。
とりあえず
DFA
前準備に手間を掛けるけど処理そのものは早い
NFA
即座に処理を始めるけど、処理に時間がかかる場合がある。
ぐらいに考えておけばいいと思う。
一番の違いは、DFAだと後方参照ができないことかな。
とりあえず
DFA
前準備に手間を掛けるけど処理そのものは早い
NFA
即座に処理を始めるけど、処理に時間がかかる場合がある。
ぐらいに考えておけばいいと思う。
178デフォルトの名無しさん
2008/08/02(土) 00:57:57 保守
179デフォルトの名無しさん
2008/08/02(土) 14:34:05 sh + awk は明らかに簡単だと思う。
sh + awk で出来ることを perl のみで記述する人の気持ちがどうしても理解出来ない。
ただ、ネットワークプログラミング以上になるとC, perl, ruby にならざるを得ないけど。
マシン単体での種々の手続き記述だと、
sh + awk がやっぱり一番完結になると思うんだけどな〜。
sh + awk で出来ることを perl のみで記述する人の気持ちがどうしても理解出来ない。
ただ、ネットワークプログラミング以上になるとC, perl, ruby にならざるを得ないけど。
マシン単体での種々の手続き記述だと、
sh + awk がやっぱり一番完結になると思うんだけどな〜。
180デフォルトの名無しさん
2008/08/02(土) 14:49:58 おれもawkでできることならawkでやる。
でもあまりにトリッキーなことになりそうだったらperlでやったりするかな。
でもあまりにトリッキーなことになりそうだったらperlでやったりするかな。
181あいちゃん
2008/08/03(日) 01:39:18 人に渡す可能性があるなら、awkは結構つらいことがある。
Perlでやれば基本的に問題ないから、Perlで書く癖がつく。
ShellScriptでいったん使うだけなら、awkは便利だけど。
Perlでやれば基本的に問題ないから、Perlで書く癖がつく。
ShellScriptでいったん使うだけなら、awkは便利だけど。
182デフォルトの名無しさん
2008/08/04(月) 01:23:58183デフォルトの名無しさん
2008/08/04(月) 02:16:24 >>182
同感。ただバイナリは仕方ないにしても、
全半角混在の固定長フォーマットが扱いにくいんだよな。
ASCIIにすると全角のみ部分が処理しにくいし、
SJISとかにすると正しく切り出せないし・・・
あれはなんとかならんものかな。
同感。ただバイナリは仕方ないにしても、
全半角混在の固定長フォーマットが扱いにくいんだよな。
ASCIIにすると全角のみ部分が処理しにくいし、
SJISとかにすると正しく切り出せないし・・・
あれはなんとかならんものかな。
184デフォルトの名無しさん
2008/08/07(木) 01:55:09 やっぱり ASCII だけの問題にしておいた方が無難。
185デフォルトの名無しさん
2008/08/11(月) 15:38:13 ttp://www.kt.rim.or.jp/~kbk/gawk-3.1/
でダウソできるのがASCIIとSJISをうまく扱えるやつぢゃねの?
でダウソできるのがASCIIとSJISをうまく扱えるやつぢゃねの?
186デフォルトの名無しさん
2008/08/13(水) 00:38:23 >>185
いや、そのgawk使ってるけど、全半角混在の固定長は困るはず。
両方別々なら問題なく扱えるけど、同時には扱えない。
例えば。SJIS1行5バイト+改行の固定長ファイルで
1行は2項目(a:全半角混在4バイト b:半角のみ1バイト)のファイルがあるとき。
asciiモードならa, bを切り分けられるがaの全角文字は処理できない。
sjisモードならa, bを切り分けられない。
悩ましいのは、項目を切り分けるスクリプトをascii オプションで起動して
出力結果をsjisで処理すれば(めんどくさいけど)現状で処理できてしまう。
ので、マニュアルに書いてある通り、作者をおねがいすれば可能性はあるかもしれないが、
お願いするのが躊躇われる感じなのね。
いや、そのgawk使ってるけど、全半角混在の固定長は困るはず。
両方別々なら問題なく扱えるけど、同時には扱えない。
例えば。SJIS1行5バイト+改行の固定長ファイルで
1行は2項目(a:全半角混在4バイト b:半角のみ1バイト)のファイルがあるとき。
asciiモードならa, bを切り分けられるがaの全角文字は処理できない。
sjisモードならa, bを切り分けられない。
悩ましいのは、項目を切り分けるスクリプトをascii オプションで起動して
出力結果をsjisで処理すれば(めんどくさいけど)現状で処理できてしまう。
ので、マニュアルに書いてある通り、作者をおねがいすれば可能性はあるかもしれないが、
お願いするのが躊躇われる感じなのね。
187デフォルトの名無しさん
2008/08/13(水) 22:12:09 awkは時代の関数だから使われなくなっていくんだろなあ
188デフォルトの名無しさん
2008/08/15(金) 02:08:00 UTF-8の場合でも固定長は半角幅しか対応できてない。
文字数とバイト数と表示幅とか、日本語は面倒だのう。
length()とかでバイト数を拾えないから自前で処理もやりにくい。
文字数とバイト数と表示幅とか、日本語は面倒だのう。
length()とかでバイト数を拾えないから自前で処理もやりにくい。
189デフォルトの名無しさん
2008/08/19(火) 22:37:59 >>188
一瞬納得しかけたけど。
冷静に考えると、そもそも1文字が可変長であるUTF8を
固定長ファイルの文字コードに使おうと考えた奴を締め上げて
泣くほど問い詰める方が先だと思うのは俺だけ?
考えても考えてもメリットが思いつかないよ…
一瞬納得しかけたけど。
冷静に考えると、そもそも1文字が可変長であるUTF8を
固定長ファイルの文字コードに使おうと考えた奴を締め上げて
泣くほど問い詰める方が先だと思うのは俺だけ?
考えても考えてもメリットが思いつかないよ…
190デフォルトの名無しさん
2008/08/21(木) 00:40:10191デフォルトの名無しさん
2008/08/23(土) 01:53:25 あるフィルタスクリプトをgawkで書いているのですが
文字のコードを整数値に変換しようとしてうまくいきません
たとえば「c」という文字のコードを整数値にしようとして
BEGIN {
testChar = "c";
printf("testChar=%d\n",testChar);
}
のようにしても「testChar=0」と表示されてしまいます
良い方法があればお教えください
文字のコードを整数値に変換しようとしてうまくいきません
たとえば「c」という文字のコードを整数値にしようとして
BEGIN {
testChar = "c";
printf("testChar=%d\n",testChar);
}
のようにしても「testChar=0」と表示されてしまいます
良い方法があればお教えください
192デフォルトの名無しさん
2008/08/23(土) 03:21:15194191
2008/08/23(土) 10:56:41 >>192
ttp://www.kt.rim.or.jp/~kbk/gawk-30/gawk_16.html
にあったものを試してみました.期待どおりの動作をしてくれます.
どうもありがとうございました.
ttp://www.kt.rim.or.jp/~kbk/gawk-30/gawk_16.html
にあったものを試してみました.期待どおりの動作をしてくれます.
どうもありがとうございました.
195デフォルトの名無しさん
2008/09/15(月) 01:12:37 入力内容をawkで生成することは出来ますでしょうか
もしくはBEGIN等のブロック内で文字列を生成して
その文字列のパターン毎に分岐、フィールドを使っての処理
(要はawkに入力ファイル渡した時に簡単に書ける処理)
を簡単に書くことは出来るのでしょうか
例えば…どんな処理が適切な説明か判りませんが
BEGIN{for(i=0;i<10;i++) print int(rand()*10),int(rand()*10),int(rand()*10)}
の結果に対して
$1+$2+$3<10{ print $1+$2+$3 }
$1+$2+$3>=10{ print ($1+$2+$3) % 10 }
…とかそんな感じで、テキストを生成した結果に対して
フィルターとして比較式や正規表現で分岐して、フィールドを使って処理する感じです。
やっぱりバッチファイルとawkファイルをいくつも作ったり
一行一行に対してif文で分岐したりsplitで分割するしか無いですかね…。
もしくはBEGIN等のブロック内で文字列を生成して
その文字列のパターン毎に分岐、フィールドを使っての処理
(要はawkに入力ファイル渡した時に簡単に書ける処理)
を簡単に書くことは出来るのでしょうか
例えば…どんな処理が適切な説明か判りませんが
BEGIN{for(i=0;i<10;i++) print int(rand()*10),int(rand()*10),int(rand()*10)}
の結果に対して
$1+$2+$3<10{ print $1+$2+$3 }
$1+$2+$3>=10{ print ($1+$2+$3) % 10 }
…とかそんな感じで、テキストを生成した結果に対して
フィルターとして比較式や正規表現で分岐して、フィールドを使って処理する感じです。
やっぱりバッチファイルとawkファイルをいくつも作ったり
一行一行に対してif文で分岐したりsplitで分割するしか無いですかね…。
196デフォルトの名無しさん
2008/09/15(月) 01:52:51 >>195
敢えて入力を生成したいのなら、awkをパイプで繋げばいいと思う。
そうではなく、単に乱数で処理を振り分けたいのなら普通にif文でいいと思う。
それはさておき、
--
$1+$2+$3<10{ print $1+$2+$3 }
$1+$2+$3>=10{ print ($1+$2+$3) % 10 }
--
は別に上の条件式は要らんだろ。一桁の数値を10で割った余りは元のままだからな。
敢えて入力を生成したいのなら、awkをパイプで繋げばいいと思う。
そうではなく、単に乱数で処理を振り分けたいのなら普通にif文でいいと思う。
それはさておき、
--
$1+$2+$3<10{ print $1+$2+$3 }
$1+$2+$3>=10{ print ($1+$2+$3) % 10 }
--
は別に上の条件式は要らんだろ。一桁の数値を10で割った余りは元のままだからな。
197デフォルトの名無しさん
2008/09/15(月) 14:18:55 >196
いやあくまで例題なので内容は深く考えないでください…orz
普通にif文とは言うものの、折角awkが標準で備えてる便利な機能を無視して冗長な書き方するのも難だし
かと言って.awkファイル複数個とバッチで、パイプでつなげて処理するのも…う〜ん、となってしまう。
良い書き方無いかなぁと思ったので聞いてみたのですが、ifとsplitで頑張ります。
いやあくまで例題なので内容は深く考えないでください…orz
普通にif文とは言うものの、折角awkが標準で備えてる便利な機能を無視して冗長な書き方するのも難だし
かと言って.awkファイル複数個とバッチで、パイプでつなげて処理するのも…う〜ん、となってしまう。
良い書き方無いかなぁと思ったので聞いてみたのですが、ifとsplitで頑張ります。
198デフォルトの名無しさん
2008/09/16(火) 02:58:54 質問がよくわからんのだが、BEGIN部で生成したファイルを処理部で扱いたいということかな?
例えば、
gawk 'BEGIN{ ARGV[1]="in_file.txt"; ARGC=2; }{ print }'
ってやったら in_file.txt を表示できるぞい
例えば、
gawk 'BEGIN{ ARGV[1]="in_file.txt"; ARGC=2; }{ print }'
ってやったら in_file.txt を表示できるぞい
199デフォルトの名無しさん
2008/09/16(火) 09:51:03 >198
!!!
目から鱗です。
そっか、ファイル生成しちゃえば一発で行けるのか…やってみます
!!!
目から鱗です。
そっか、ファイル生成しちゃえば一発で行けるのか…やってみます
200デフォルトの名無しさん
2008/09/16(火) 15:07:48 うげ、一旦ファイルを作るのはありなのかよ。
ifを使うのは冗長なのに、ファイルを作るのは冗長じゃないってどんなセンスなんだ。
ifを使うのは冗長なのに、ファイルを作るのは冗長じゃないってどんなセンスなんだ。
201デフォルトの名無しさん
2008/09/16(火) 17:48:16 >200
入力データは規則性のあるもので、生成してしまえるけど
それに対しての分岐は多い…という場合
ifやsplitを羅列するよりも、awkが元々持ってる
パターンとフィールド分割を使った方が
スッキリすると思うのですが間違ってるでしょうか…。
入力データは規則性のあるもので、生成してしまえるけど
それに対しての分岐は多い…という場合
ifやsplitを羅列するよりも、awkが元々持ってる
パターンとフィールド分割を使った方が
スッキリすると思うのですが間違ってるでしょうか…。
202デフォルトの名無しさん
2008/09/16(火) 19:39:26 >>201
別にいいんじゃね?
巨大な中間ファイルを作るってわけでもないんだろうし。
まぁ、次の理由で私は中間ファイルを作るのは避けるけどね。
・フルパスを指定しない場合、カレントディレクトリに書き込み権限がある保障がない。
・そもそも同名ファイルが存在していて書き込み権限がないかも知れない。
・つーか、同時に2件動かしたらバッティングしてしまう。
・だからと言って、一々ユニークな名前のファイル名を生成するのも面倒だ。
・しかも、中間ファイルは後で消しておく必要があるかもしれない。
それと、自前で入力を生成するなら、最初から分割された状態で作ればいいからsplitは要らないね。
パターンを使うかifを使うかは趣味の問題のような気がするけど。
# $1+$2+$3<10{print;}と書くかif($1+$2+$3<10){print;}と書くかの違いだもんね。
別にいいんじゃね?
巨大な中間ファイルを作るってわけでもないんだろうし。
まぁ、次の理由で私は中間ファイルを作るのは避けるけどね。
・フルパスを指定しない場合、カレントディレクトリに書き込み権限がある保障がない。
・そもそも同名ファイルが存在していて書き込み権限がないかも知れない。
・つーか、同時に2件動かしたらバッティングしてしまう。
・だからと言って、一々ユニークな名前のファイル名を生成するのも面倒だ。
・しかも、中間ファイルは後で消しておく必要があるかもしれない。
それと、自前で入力を生成するなら、最初から分割された状態で作ればいいからsplitは要らないね。
パターンを使うかifを使うかは趣味の問題のような気がするけど。
# $1+$2+$3<10{print;}と書くかif($1+$2+$3<10){print;}と書くかの違いだもんね。
203デフォルトの名無しさん
2008/09/18(木) 01:19:00 色々考え方があるのね。
自分ならトリッキーな細工して1つに収めず分割してif使わずに書くけど。
手早くカタをつけられるのがawkの良い所だと思うし、
技巧に走ると間違いなく忘れるのでメンテ不可能になる可能性大
ま、それはそれとして>>198はパズル的な面白さがあって良いね。
自分ならトリッキーな細工して1つに収めず分割してif使わずに書くけど。
手早くカタをつけられるのがawkの良い所だと思うし、
技巧に走ると間違いなく忘れるのでメンテ不可能になる可能性大
ま、それはそれとして>>198はパズル的な面白さがあって良いね。
204デフォルトの名無しさん
2008/09/19(金) 19:54:42 >202
う〜ん、言われてみればそうかも。
一応、今回のは仕事で使うわけでもなければ他人に使ってもらう予定もない
完全な個人用スクリプトなのでどうにでもなりますが
これが業務や自分以外も使うものであれば素直にifなんでしょうね。
う〜ん、言われてみればそうかも。
一応、今回のは仕事で使うわけでもなければ他人に使ってもらう予定もない
完全な個人用スクリプトなのでどうにでもなりますが
これが業務や自分以外も使うものであれば素直にifなんでしょうね。
205デフォルトの名無しさん
2008/09/22(月) 20:50:40 2008/09/15 13:17 61 20080915142145.txt
2008/09/16 13:17 316 2008091611529.txt
2008/09/22 20:09 24,028 2008_0922asahiindex.txt
2008/09/22 12:57 1,545 clean.txt
というファイル一覧から、gawkで今日の日付のファイルだけ抜き出すにはどうすりゃいいんだっけ?
BEGIN{month = strftime("%m",systime()); date = strftime("%d",systime())}
/month/ && /date/ {print $0}
でいいかと思ったら、/ /のなかにmonthとかは使えないらしい。
/strftime("%d",systime())/ {print $0}
とべた書きしてもだめ。
ど忘れ中。ヘルプミー。
2008/09/16 13:17 316 2008091611529.txt
2008/09/22 20:09 24,028 2008_0922asahiindex.txt
2008/09/22 12:57 1,545 clean.txt
というファイル一覧から、gawkで今日の日付のファイルだけ抜き出すにはどうすりゃいいんだっけ?
BEGIN{month = strftime("%m",systime()); date = strftime("%d",systime())}
/month/ && /date/ {print $0}
でいいかと思ったら、/ /のなかにmonthとかは使えないらしい。
/strftime("%d",systime())/ {print $0}
とべた書きしてもだめ。
ど忘れ中。ヘルプミー。
206デフォルトの名無しさん
2008/09/22(月) 21:05:13 BEGIN{date=strftime("%m/%d")} $0 ~ date {print $0}
207デフォルトの名無しさん
2008/09/22(月) 21:45:34 >>206
thanks!
thanks!
208デフォルトの名無しさん
2008/10/10(金) 19:41:51 質問です。
入力中のファイル名はFILENAMEにセットされますが、
入力中のファイルのパスを取得するにはどうしたらよいですか。
入力中のファイル名はFILENAMEにセットされますが、
入力中のファイルのパスを取得するにはどうしたらよいですか。
209デフォルトの名無しさん
2008/10/10(金) 22:13:43210デフォルトの名無しさん
2008/11/12(水) 19:19:08awkの結果を set か setenv の変数に代入したいです。
awk '{ print $1+ $3 }' test.txt
で数値が出ます。
この結果を変数に代入するにはどうしたらいいんでしょうか?
set tmp=`awk '{ $1+ $3 }' test.txt`
これだと上手くいきません。print はそのままでいいのでしょうか?
211デフォルトの名無しさん
2008/11/12(水) 20:24:22 なんで print を省略できると考えたのかが謎だが
212デフォルトの名無しさん
2008/11/12(水) 23:57:16 >print はそのままでいいのでしょうか?
まず試せよw
まず試せよw
213デフォルトの名無しさん
2008/11/13(木) 14:17:14 新紀元社のプログラミング言語awkがどこも売り切れなんだけど
もう入らないのかな
もう入らないのかな
214デフォルトの名無しさん
2008/11/16(日) 03:02:56215デフォルトの名無しさん
2008/11/18(火) 11:28:33 カンマ区切りのデータファイルがあり、その中で、第1フィールドと第3フィールド内にもし
子音、子音、子音、母音が存在すればその行だけ抜き出すオークのスクリプトファイルをつくりたいのですがどうすればよいですか
子音、子音、子音、母音が存在すればその行だけ抜き出すオークのスクリプトファイルをつくりたいのですがどうすればよいですか
216デフォルトの名無しさん
2008/11/18(火) 11:41:15 >>215
データファイルのサンプルと抜き出したい行ヨロ
データファイルのサンプルと抜き出したい行ヨロ
217デフォルトの名無しさん
2008/11/18(火) 11:50:40 こんな感じです
takeshi,fiad,fdjioaf,fdjsoafds(←該当なし)
dddacea,fsaofsa,rrra,fjisaofdjsa(dddaとrrraが該当)
aexxxu,dsoifsa,yyyuo,fjsaofa(xxxuとyyyuが該当)
takeshi,fiad,fdjioaf,fdjsoafds(←該当なし)
dddacea,fsaofsa,rrra,fjisaofdjsa(dddaとrrraが該当)
aexxxu,dsoifsa,yyyuo,fjsaofa(xxxuとyyyuが該当)
218びぎなぁ
2008/11/18(火) 12:12:55 オークスクリプトを実行すると情報を表示するようにしたのですが1行目と最後の行だけを表示しないようにするには
END内に何て書けば宜しいでしょうか
END内に何て書けば宜しいでしょうか
219デフォルトの名無しさん
2008/11/18(火) 12:43:59 >>215
BEGIN{FS=","}
function term_check(term, lower_term) # lower_term は局所変数
{
lower_term=tolower(term)
if(lower_term ~ /[bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][aiueo]/) return 1
return 0
}
{
if(term_check($1) && term_check($3)) print
}
パターン繰り返しって {3} とかでいけるはずなんだが
書き方知らないのでコピペしたw
BEGIN{FS=","}
function term_check(term, lower_term) # lower_term は局所変数
{
lower_term=tolower(term)
if(lower_term ~ /[bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][aiueo]/) return 1
return 0
}
{
if(term_check($1) && term_check($3)) print
}
パターン繰り返しって {3} とかでいけるはずなんだが
書き方知らないのでコピペしたw
220デフォルトの名無しさん
2008/11/18(火) 12:47:37221デフォルトの名無しさん
2008/11/18(火) 13:53:22 >>218
1行ずつバッファリングして、次の行の入力で前の行を出力すれば最後の行は消えてなくなる。
awk 'NR > 2 {print buffer;} NR > 1 {buffer = $0;}'
1行ずつバッファリングして、次の行の入力で前の行を出力すれば最後の行は消えてなくなる。
awk 'NR > 2 {print buffer;} NR > 1 {buffer = $0;}'
222デフォルトの名無しさん
2008/11/18(火) 14:20:29 >>215
gawkなら
awk -F "," -v r="[bcdfghj-np-tv-z]{3}[aiueo]" --posix '$1 ~ r && $3 ~ r'
$1と$3どちらか一方にあればいいなら&&を||に変えてね
gawkなら
awk -F "," -v r="[bcdfghj-np-tv-z]{3}[aiueo]" --posix '$1 ~ r && $3 ~ r'
$1と$3どちらか一方にあればいいなら&&を||に変えてね
223デフォルトの名無しさん
2008/11/18(火) 16:29:37 >>219
助かりました!
助かりました!
224びぎなぁ
2008/11/18(火) 16:46:03 出来ました ありがとうございます
225デフォルトの名無しさん
2008/11/19(水) 23:48:41 込み入ってて整理できないので教えてください。
・対象のテキストは2行目がない(1行目しかない)かつ
・1行目はひらがなカタカナ漢字で15文字以内
という条件を書くのって、次のようにしたのですが、うまくヒットしません。
どう書けばいいでしょう?
NR==2 && length($0) == 0 && NR==1 && /[ぁ-んァ-ヶ亜-腕]{1,15}/
・対象のテキストは2行目がない(1行目しかない)かつ
・1行目はひらがなカタカナ漢字で15文字以内
という条件を書くのって、次のようにしたのですが、うまくヒットしません。
どう書けばいいでしょう?
NR==2 && length($0) == 0 && NR==1 && /[ぁ-んァ-ヶ亜-腕]{1,15}/
226デフォルトの名無しさん
2008/11/19(水) 23:53:31 >>225
NR == 2 && NR == 1じゃ、絶対成立しないだろ。
NR == 2 && NR == 1じゃ、絶対成立しないだろ。
227デフォルトの名無しさん
2008/11/19(水) 23:54:54 awkは行を1行ずつ処理するから、事前にトータル行数を知ることはできない。
トータル行数が1行であることを保証したいなら、ENDブロックで処理するしかない。
トータル行数が1行であることを保証したいなら、ENDブロックで処理するしかない。
228デフォルトの名無しさん
2008/11/20(木) 00:22:37 >事前にトータル行数を知ることはできない
BEGIN部で数えれば?
BEGIN部で数えれば?
229デフォルトの名無しさん
2008/11/20(木) 00:28:19 >>228
どうやって? 対象がファイルである保証があるならwcでも呼べばいいけどそれならawkでやる必要さえないよね。
どうやって? 対象がファイルである保証があるならwcでも呼べばいいけどそれならawkでやる必要さえないよね。
230デフォルトの名無しさん
2008/11/20(木) 03:49:07 { a = $0 }
END { if (NR == 1 && a ~ /re/) print a }
とか?
END { if (NR == 1 && a ~ /re/) print a }
とか?
231デフォルトの名無しさん
2008/11/20(木) 23:58:06 どなたか、任意ビット幅の2の補数HEXをDECに変換するプログラムを書いてもらえませぬか?
232デフォルトの名無しさん
2008/11/22(土) 12:02:58 仕様が不明確なところがあるし、なによりなんでawkで?
233デフォルトの名無しさん
2008/11/26(水) 22:53:51 >>232
ここがawkスレだからでしょ。
ここがawkスレだからでしょ。
234デフォルトの名無しさん
2008/11/29(土) 03:05:38 >>232
考えるな。感じろw
考えるな。感じろw
235デフォルトの名無しさん
2008/12/12(金) 07:21:00 「あなたは何故awkでやろうとするのですか?」
「そこにawkがあるから」
「そこにawkがあるから」
236デフォルトの名無しさん
2008/12/13(土) 04:23:45 awkからsystem()でgrepとかsedとか呼んだりする癖が付いている
シェルスクリプトにする方がむしろ違和感
シェルスクリプトにする方がむしろ違和感
237デフォルトの名無しさん
2008/12/13(土) 23:56:31 おいおい、grepやsedぐらい呼び出さずにawkでやろうぜ。
238デフォルトの名無しさん
2008/12/16(火) 00:29:26 grepやsedはパイプでつなげて使うものじゃないの?(^^;
239デフォルトの名無しさん
2009/01/10(土) 22:10:41 gawk 3.1.4 mb のwindows版のEXEファイルが欲しい…
240デフォルトの名無しさん
2009/01/11(日) 00:38:51 なんでそんな古いバージョンが欲しいの?
241デフォルトの名無しさん
2009/01/11(日) 12:16:04 >なんでそんな古いバージョンが欲しいの?
lengthとかsubstrで、「j」付き文字列関数があるからです。
3.1.5以降だと、同じスクリプトファイル内で、バイト単位処理と
キャラクター単位処理の混在が難儀なのです。
lengthとかsubstrで、「j」付き文字列関数があるからです。
3.1.5以降だと、同じスクリプトファイル内で、バイト単位処理と
キャラクター単位処理の混在が難儀なのです。
242240
2009/01/11(日) 15:01:36 3.1.5で文字の扱いが変わったのはその通りだけど、3.1.4のWindows版て
jlengthやらあったっけ?
なかったと思うんだけど。
jlengthやらあったっけ?
なかったと思うんだけど。
243デフォルトの名無しさん
2009/01/11(日) 15:48:22 >なかったと思うんだけど。
えっ。3.1.4以前のはバイト単位オンリーって事ですか?
…それでも2バイト換算で扱えばいいから、まだマシかも。
j付きが追加されていたけど、動作変更に伴って廃止された…
と思っていました。
記憶にあるのは、どなたかの独自拡張別Verだったのか…?
えっ。3.1.4以前のはバイト単位オンリーって事ですか?
…それでも2バイト換算で扱えばいいから、まだマシかも。
j付きが追加されていたけど、動作変更に伴って廃止された…
と思っていました。
記憶にあるのは、どなたかの独自拡張別Verだったのか…?
244240
2009/01/11(日) 17:54:21 > えっ。3.1.4以前のはバイト単位オンリーって事ですか? ちゃう。
jなんとかがあったのは、
2.11ベースのjgawkと2.15ベースのjgawk
2.15ベースのとgawk+mb
3.0.xベースのgawk+mb
で、3.1.xベースのにはなかったという話だったと思う。
それぞれやってる人が違う。
jなんとかがあったのは、
2.11ベースのjgawkと2.15ベースのjgawk
2.15ベースのとgawk+mb
3.0.xベースのgawk+mb
で、3.1.xベースのにはなかったという話だったと思う。
それぞれやってる人が違う。
245デフォルトの名無しさん
2009/01/11(日) 19:05:17 >3.1.xベースのにはなかったという話だったと思う。
そうですか…。
gawk 3.1.4 mb のwindows版のEXEファイルが欲しい…
ではなくて、
3.0.xベースのgawk+mb のwindows版のEXEファイルが欲しい…
という事になる訳ですが…無理っぽい。
あっても関数や組込変数が減少…その前に16bitDOS版ONLYの予感…。
諦めます。240さん、どうもでした。
そうですか…。
gawk 3.1.4 mb のwindows版のEXEファイルが欲しい…
ではなくて、
3.0.xベースのgawk+mb のwindows版のEXEファイルが欲しい…
という事になる訳ですが…無理っぽい。
あっても関数や組込変数が減少…その前に16bitDOS版ONLYの予感…。
諦めます。240さん、どうもでした。
246デフォルトの名無しさん
2009/01/11(日) 19:50:26 >>245
http://www.hinadori.atnifty.com/~wills/
にあるよ。3.0.6のやつ。
DOS版だけじゃなくてWin32版もある。
3.0.6→3.1.xで増えた機能でも使ってんの?
http://www.hinadori.atnifty.com/~wills/
にあるよ。3.0.6のやつ。
DOS版だけじゃなくてWin32版もある。
3.0.6→3.1.xで増えた機能でも使ってんの?
247デフォルトの名無しさん
2009/01/11(日) 22:30:39 >あるよ。3.0.6のやつ。
おお。 ありがとうございます。
>3.0.6→3.1.xで増えた機能でも使ってんの?
いつ何が増えたのかよく把握していないんですが、
gensubとかmktimeとかswitch-caseとか…ありますかね。
まあ、代替手段はあるので試してみます。どうもです。
おお。 ありがとうございます。
>3.0.6→3.1.xで増えた機能でも使ってんの?
いつ何が増えたのかよく把握していないんですが、
gensubとかmktimeとかswitch-caseとか…ありますかね。
まあ、代替手段はあるので試してみます。どうもです。
248デフォルトの名無しさん
2009/02/23(月) 08:11:12 awkで、組み合わせの全てを作る、という事はできるのでしょうか?
いわゆるnCrの、個数ではなくて、中身を知りたいという事なのですが・・・。
(mawkを使っています)
いわゆるnCrの、個数ではなくて、中身を知りたいという事なのですが・・・。
(mawkを使っています)
249デフォルトの名無しさん
2009/02/24(火) 18:18:34 >>248
できます
できます
250sage
2009/03/04(水) 15:23:19 248です。
なんとかできました。249さんどうもです。
なんとかできました。249さんどうもです。
251デフォルトの名無しさん
2009/03/04(水) 15:24:16 sage間違えた…
252デフォルトの名無しさん
2009/03/23(月) 11:47:59 int(0.5005*10000)が5004になるのはなぜですか。
253デフォルトの名無しさん
2009/03/23(月) 12:41:00 丸め誤差でしょう。
切り捨て前に0.5足すとか工夫してみては如何でしょうか。
詳しくは、IEEEと丸め誤差辺りのキーワードで検索のこと。
切り捨て前に0.5足すとか工夫してみては如何でしょうか。
詳しくは、IEEEと丸め誤差辺りのキーワードで検索のこと。
254デフォルトの名無しさん
2009/03/23(月) 19:57:34 >253
ありがとう
ありがとう
255デフォルトの名無しさん
2009/04/13(月) 21:36:16 gawkで掲示板作りたいんですけど、
gawkが使える無料鯖どこかにありませんか?
gawkが使える無料鯖どこかにありませんか?
256デフォルトの名無しさん
2009/04/13(月) 21:58:14 Linuxが入ってるレンタル鯖なら入ってるんじゃないかなぁ?
レンタル鯖板できいてみたら。
さくらのFreeBSDはFreeBSDのawk(!=gawk)だった。
レンタル鯖板できいてみたら。
さくらのFreeBSDはFreeBSDのawk(!=gawk)だった。
257デフォルトの名無しさん
2009/04/13(月) 22:07:10 >>256
さくらはgawkですか。
Windowsじゃないレンタル鯖ならawkが使えても良さそうですけど、
無料ではなかなか見つからないんですよね。
perl,ruby,phpは多いんですけどねぇ。。
さくらはgawkですか。
Windowsじゃないレンタル鯖ならawkが使えても良さそうですけど、
無料ではなかなか見つからないんですよね。
perl,ruby,phpは多いんですけどねぇ。。
258257
2009/04/13(月) 22:14:30 失礼。
さくらはgawkじゃないawkですか。
さくらはgawkじゃないawkですか。
259デフォルトの名無しさん
2009/04/18(土) 13:07:13 わらうw
ttp://awk.info/?doc/dsl/awkplusplus.html
object_variable = class_name.new[(optional parameters)]
object_variable.method_name(parameters)
object_variable.delete
ttp://awk.info/?doc/dsl/awkplusplus.html
object_variable = class_name.new[(optional parameters)]
object_variable.method_name(parameters)
object_variable.delete
260デフォルトの名無しさん
2009/04/18(土) 13:30:10 >>259
同じくウケた
awkは永続的に使っていて,C-->C++-->Javaと乗り継いできたが,awkはこれらコンパイラ言語を使う上で
良い学習材料になってきたと思い感謝している(もちろん未だにscriptのawkをawkで書いている).
唯一awkで勉強できなかったのがOOPだったから,学習材料としてのawkがこういう方向に活路を見いだすのは
良いことかもしれない.ただし実用に向けて考えてみると,個人的にはOOPが本領を発揮するのは頭の中でalgorithmを
把握しきれなくなる程度に大きなシステムを組み上げる場合なので,果たしてそれをawkで書くかといわれると….
同じくウケた
awkは永続的に使っていて,C-->C++-->Javaと乗り継いできたが,awkはこれらコンパイラ言語を使う上で
良い学習材料になってきたと思い感謝している(もちろん未だにscriptのawkをawkで書いている).
唯一awkで勉強できなかったのがOOPだったから,学習材料としてのawkがこういう方向に活路を見いだすのは
良いことかもしれない.ただし実用に向けて考えてみると,個人的にはOOPが本領を発揮するのは頭の中でalgorithmを
把握しきれなくなる程度に大きなシステムを組み上げる場合なので,果たしてそれをawkで書くかといわれると….
261260
2009/04/18(土) 13:57:19 s/algorithm/データ構造/
262デフォルトの名無しさん
2009/05/09(土) 23:49:39 最近rubyの勉強始めたんだが、
「rubyがあればAWKいらね」とは思えん。
逆にAWKの便利さを再認識した。
やっぱり、簡単なテキスト処理は
AWKでやったほうが簡単だ。
「rubyがあればAWKいらね」とは思えん。
逆にAWKの便利さを再認識した。
やっぱり、簡単なテキスト処理は
AWKでやったほうが簡単だ。
263デフォルトの名無しさん
2009/05/09(土) 23:58:09 各行に対して処理って場合はawkが良いね
264デフォルトの名無しさん
2009/05/10(日) 00:37:15 rubyはオブジェクト指向を強制されるから小回りがきかん
265デフォルトの名無しさん
2009/05/10(日) 01:20:35 JavaScriptが動く HTML実験部屋
ttp://homepage2.nifty.com/tomoarai/java/exper.html
ttp://homepage2.nifty.com/tomoarai/java/exper.html
266デフォルトの名無しさん
2009/05/14(木) 08:38:05 jawkの話題が全然出ないね。
使ってる人少ないの?
使ってる人少ないの?
267デフォルトの名無しさん
2009/05/19(火) 23:16:20 >>266
さくっと1行で済むのが気に入ってる俺には無用だな
さくっと1行で済むのが気に入ってる俺には無用だな
268デフォルトの名無しさん
2009/06/01(月) 15:22:34 >>266
Jア(オ)ーク、プラグアウッ!
Jア(オ)ーク、プラグアウッ!
269デフォルトの名無しさん
2009/06/08(月) 01:31:39 ttp://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_167
Geocoding - 住所から緯度経度を検索 だって。何これおもろい。
Geocoding - 住所から緯度経度を検索 だって。何これおもろい。
270デフォルトの名無しさん
2009/06/21(日) 16:39:12 {if(miso<$1){printf($1)}} miso=30
を実行すると$1が1桁の数字のときにうまくいかないんですけどなぜ?
を実行すると$1が1桁の数字のときにうまくいかないんですけどなぜ?
271デフォルトの名無しさん
2009/06/21(日) 19:43:04 文字列で比較されてるんじゃね?
miso<$1-0
でやったらどう?
miso<$1-0
でやったらどう?
272デフォルトの名無しさん
2009/06/21(日) 21:34:56273デフォルトの名無しさん
2009/06/21(日) 22:04:19274デフォルトの名無しさん
2009/06/21(日) 22:23:40 >>273
$1が4のときに出てほしくないのに出てしまうんです...
$1が4のときに出てほしくないのに出てしまうんです...
275デフォルトの名無しさん
2009/06/21(日) 22:31:41276デフォルトの名無しさん
2009/06/21(日) 22:46:46277デフォルトの名無しさん
2009/06/21(日) 22:54:47278デフォルトの名無しさん
2009/06/22(月) 00:38:26 文字列比較されてるなら一桁のときに上手くいかないというより
二桁のときだけ上手くいくという感じなのかね。
WindowsXPのコマンドプロンプトでgawk(3.1.5)使って下記を試してみたけど
その現象再現できなかった。
gawk "{if(miso<$1){printf($1)}}" miso=30
二桁のときだけ上手くいくという感じなのかね。
WindowsXPのコマンドプロンプトでgawk(3.1.5)使って下記を試してみたけど
その現象再現できなかった。
gawk "{if(miso<$1){printf($1)}}" miso=30
279デフォルトの名無しさん
2009/06/22(月) 07:43:07 $awk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
compiled limits:
max NF 32767
sprintf buffer 2040
$seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
うまく動いているようだが。
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
compiled limits:
max NF 32767
sprintf buffer 2040
$seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
うまく動いているようだが。
280デフォルトの名無しさん
2009/06/22(月) 18:20:09 >>279をマネさせてもらった
$ awk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
$ seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
$ awk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
$ seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
281デフォルトの名無しさん
2009/06/22(月) 19:59:10 miso=30って-v付けなくていけるんだ。しらんかった。
2009/06/23(火) 01:02:55
gawkは
コマンドラインで指定されたファイル名が var=val という形式ならば、それは変数への代入であると解釈されます。変数 var は値 val に設定されます (これは、すべての BEGIN ブロックを実行したあとに行われます)。
やっぱりもれの XPコマンドプロンプト環境でも
>gawk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
>seq 1 40 | gawk "{if(miso<$1) print}" miso=30
31
32
33
34
35
36
37
38
39
40
って期待通りの動きだYO!
コマンドラインで指定されたファイル名が var=val という形式ならば、それは変数への代入であると解釈されます。変数 var は値 val に設定されます (これは、すべての BEGIN ブロックを実行したあとに行われます)。
やっぱりもれの XPコマンドプロンプト環境でも
>gawk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
>seq 1 40 | gawk "{if(miso<$1) print}" miso=30
31
32
33
34
35
36
37
38
39
40
って期待通りの動きだYO!
283デフォルトの名無しさん
2009/06/24(水) 00:39:07 固定長で改行なしのファイル(6MB超)を処理することになり、
他のソフトで「改行ありの固定長」にしてから、awkで処理していたのですが…
データファイルによく出てくる文字をとりあえずRSに見立てて読み込み
→RSに指定した文字を連接
→固定長の1行分より長かったらその部分を切り出し
していくと「改行ありの固定長」、できちゃいました。
RSに指定した文字がしばらく出てこなければ変数パンクしちゃうし、大分危なっかしいの
ですが、とりあえずawkでできたのが少しうれしい。
他のソフトで「改行ありの固定長」にしてから、awkで処理していたのですが…
データファイルによく出てくる文字をとりあえずRSに見立てて読み込み
→RSに指定した文字を連接
→固定長の1行分より長かったらその部分を切り出し
していくと「改行ありの固定長」、できちゃいました。
RSに指定した文字がしばらく出てこなければ変数パンクしちゃうし、大分危なっかしいの
ですが、とりあえずawkでできたのが少しうれしい。
284デフォルトの名無しさん
2009/06/24(水) 03:25:12 改行ありの固定長をawkで読んだのなら
substr($0, start, length) でばらせよw
substr($0, start, length) でばらせよw
285デフォルトの名無しさん
2009/06/26(金) 11:29:46286デフォルトの名無しさん
2009/06/30(火) 01:27:46 fold とか?
287デフォルトの名無しさん
2009/07/13(月) 09:52:52 正規表現で空白で区切られたテキストをHTMLでいうtableにしたいです。
例)
10進 2進 8進
000 000 000
001 001 001
002 010 002
003 011 003
↓↓↓↓↓↓↓
<table>
<tr><th>10進</th> <th>2進</th> <th>8進</th></tr>
<tr><td>000</td> <td>000</td> <td>000</td></tr>
<tr><td>001</td> <td>001</td> <td>001</td></tr>
<tr><td>002</td> <td>010</td> <td>002</td></tr>
<tr><td>003</td> <td>011</td> <td>003</td></tr>
</table>
例)
10進 2進 8進
000 000 000
001 001 001
002 010 002
003 011 003
↓↓↓↓↓↓↓
<table>
<tr><th>10進</th> <th>2進</th> <th>8進</th></tr>
<tr><td>000</td> <td>000</td> <td>000</td></tr>
<tr><td>001</td> <td>001</td> <td>001</td></tr>
<tr><td>002</td> <td>010</td> <td>002</td></tr>
<tr><td>003</td> <td>011</td> <td>003</td></tr>
</table>
288デフォルトの名無しさん
2009/07/13(月) 12:07:49289デフォルトの名無しさん
2009/07/13(月) 16:12:21 正規表現使ってタグを切り替えたいのかな?
290hogehoge
2009/07/17(金) 16:37:34291デフォルトの名無しさん
2009/07/17(金) 18:35:54 今までawk '{print $3}'程度しか使って無かったが、最近これを読んでawkを見直した。
http://www.eecs.harvard.edu/cs152/lectures/CS152-Lecture_14-Kernighan.pdf
http://www.eecs.harvard.edu/cs152/lectures/CS152-Lecture_14-Kernighan.pdf
292デフォルトの名無しさん
2009/07/26(日) 15:10:31 ttp://www.kt.rim.or.jp/~kbk/gawk-3.1/
ここのgawkで>>17のサンプルを試したが動かなかった。
gawk: test.awk:4: 致命的: 入出力用の双方向ソケット `/inet/tcp/0/www.yahoo.com/80' が開けません (No such file or directory)。
ここのgawkで>>17のサンプルを試したが動かなかった。
gawk: test.awk:4: 致命的: 入出力用の双方向ソケット `/inet/tcp/0/www.yahoo.com/80' が開けません (No such file or directory)。
293hogehoge
2009/07/27(月) 11:13:15 それはそこのサイトの人に言えよ
294デフォルトの名無しさん
2009/07/28(火) 00:11:42 いつのまにかgawk 3.1.7が出てた。
295デフォルトの名無しさん
2009/07/30(木) 11:45:58 Ruby 勉強中だけど AWK のほうが楽しいぜ(´・ω・`)
296デフォルトの名無しさん
2009/08/06(木) 10:22:37 7月7日→[[7月7日|07月07日]]
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月3日]]
12月16日→[[12月16日|12月16日]]
と置き換えたいです。
perlならわりと簡単なのですが、awkで簡単にいきますか?
自分がawkのことを勉強不足だからかもしれませんけど…。
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月3日]]
12月16日→[[12月16日|12月16日]]
と置き換えたいです。
perlならわりと簡単なのですが、awkで簡単にいきますか?
自分がawkのことを勉強不足だからかもしれませんけど…。
297デフォルトの名無しさん
2009/08/06(木) 10:24:13 ↑間違いました。
7月7日→[[7月7日|07月07日]]
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月03日]]
12月16日→[[12月16日|12月16日]]
7月7日→[[7月7日|07月07日]]
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月03日]]
12月16日→[[12月16日|12月16日]]
298デフォルトの名無しさん
2009/08/06(木) 11:03:17 例がよくわからないんだけど,数字1桁の部分を2桁にしたいってこと?
299デフォルトの名無しさん
2009/08/06(木) 11:13:12 {
gsub(/月|日/," ");
printf("%02d月%02d日\n",$1,$2);
}
とか.
フィールドセパレータがデフォルト(半角スペース)の場合ね.
gsub(/月|日/," ");
printf("%02d月%02d日\n",$1,$2);
}
とか.
フィールドセパレータがデフォルト(半角スペース)の場合ね.
300デフォルトの名無しさん
2009/08/06(木) 11:15:10 >296
Perlで簡単に書けるなら、一旦Perlコード晒してくれるか?
どうも仕様がよく解らんのだ…
Perlで簡単に書けるなら、一旦Perlコード晒してくれるか?
どうも仕様がよく解らんのだ…
301デフォルトの名無しさん
2009/08/06(木) 11:54:28 print gensub(/0([0-9])([0-9])/, "\\1\\2", "g", gensub(/([0-9]+)/, "0\\1", "g",
$1))
我ながら汚ねぇなぁ(´・ω・`)
>>299の方がいいな
$1))
我ながら汚ねぇなぁ(´・ω・`)
>>299の方がいいな
302デフォルトの名無しさん
2009/08/06(木) 12:27:22 >>298,300 置換しないで変えたいとこだけ出力するならこういう意味です。
#!/usr/bin/perl
while(1){
$line = <STDIN>;
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/){
$month = $1; $day = $2;
if($month >= 10) {
if($day >=10){
print "$& -> [[$month月$day日]]";
}
else {
print "$& -> [[$month月$day日|$month月0$day]]";
}
}
else{
if($day >=10){
print "$& -> [[$month月$day日|0$month月$day]]";
}
else{
print "$& -> [[$month月$day日|0$month月0$day]]";
}
}
}
}
1月1日 - ユーロ導入10周年。
1月1日 -> [[1月1日|01月01]]
12月31日 - ニューヨークのマンハッタン橋開通100周年。
12月31日 -> [[12月31日]]
8月21日 - ハワイ州州制50周年。
8月21日 -> [[8月21日|08月21]]
10月1日 - パラオ独立15周年。
10月1日 -> [[10月1日|10月01]]
#!/usr/bin/perl
while(1){
$line = <STDIN>;
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/){
$month = $1; $day = $2;
if($month >= 10) {
if($day >=10){
print "$& -> [[$month月$day日]]";
}
else {
print "$& -> [[$month月$day日|$month月0$day]]";
}
}
else{
if($day >=10){
print "$& -> [[$month月$day日|0$month月$day]]";
}
else{
print "$& -> [[$month月$day日|0$month月0$day]]";
}
}
}
}
1月1日 - ユーロ導入10周年。
1月1日 -> [[1月1日|01月01]]
12月31日 - ニューヨークのマンハッタン橋開通100周年。
12月31日 -> [[12月31日]]
8月21日 - ハワイ州州制50周年。
8月21日 -> [[8月21日|08月21]]
10月1日 - パラオ独立15周年。
10月1日 -> [[10月1日|10月01]]
303デフォルトの名無しさん
2009/08/06(木) 14:16:23 なんか素直にPerlでやったほうが楽そうだなあ、それ。
ちなみに、そのコードじゃ無限ループするぞ。
#!/usr/bin/perl
while($line = <STDIN>) {
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/) {
$month = $1; $day = $2;
if($month < 10 || $day < 10) {
printf "%s -> [[%d月%d日|%02d月%02d]]\n", $&, $month, $day, $month, $day;
}
else {
print "$& -> [[$month月$day日]]\n";
}
}
}
ちなみに、そのコードじゃ無限ループするぞ。
#!/usr/bin/perl
while($line = <STDIN>) {
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/) {
$month = $1; $day = $2;
if($month < 10 || $day < 10) {
printf "%s -> [[%d月%d日|%02d月%02d]]\n", $&, $month, $day, $month, $day;
}
else {
print "$& -> [[$month月$day日]]\n";
}
}
}
304デフォルトの名無しさん
2009/08/06(木) 14:44:03 だめだ…コードの意味は分かるが,仕様が良く分からん.
305デフォルトの名無しさん
2009/08/06(木) 14:47:14 7月7日
という文字列を
[[7月7日|07月07日]]
と置き換える、ってことでしょ。
なんで分からんかなぁ。そっちのが分からん。
という文字列を
[[7月7日|07月07日]]
と置き換える、ってことでしょ。
なんで分からんかなぁ。そっちのが分からん。
306デフォルトの名無しさん
2009/08/06(木) 14:53:30 入力が07月07日だったら,
出力は[[07月07日|07月07日]]になるよね?これはOK?
そもそも,そういう入力は起こりえないの?
出力は[[07月07日|07月07日]]になるよね?これはOK?
そもそも,そういう入力は起こりえないの?
>>305
そんな感じです。
目的を言っていないので、何がやりたいのかよくわからないのだと思います。
早い話、Wikiの記法を使ってリンクを張りたいのです。
0をくわえて桁を調整している理由は
文字列としてソートして正しく昇順に並ぶようにするためです。例えばWikipediaなら
7月7日のときは、[[7月7日|07月07日]]とすることで
リンクはhttp://ja.wikipedia.org/wiki/7月7日
表示される文字列は 07月07日
となります。
これをソートできるテーブルの要素にします。参考までに
http://ja.wikipedia.org/wiki/Help:%E8%A1%A8%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9#.E5.86.8D.E6.95.B4.E5.88.97.E5.8F.AF.E8.83.BD.E3.81.AA.E8.A1.A8
この処理はawkでも可能なことは可能だったんですが、無知なせいか
おそろしく不格好になりました。
>>306
それ思いました。できれば
07月07日->[[7月7日|07月07日]]
のように処理したいです。
そんな感じです。
目的を言っていないので、何がやりたいのかよくわからないのだと思います。
早い話、Wikiの記法を使ってリンクを張りたいのです。
0をくわえて桁を調整している理由は
文字列としてソートして正しく昇順に並ぶようにするためです。例えばWikipediaなら
7月7日のときは、[[7月7日|07月07日]]とすることで
リンクはhttp://ja.wikipedia.org/wiki/7月7日
表示される文字列は 07月07日
となります。
これをソートできるテーブルの要素にします。参考までに
http://ja.wikipedia.org/wiki/Help:%E8%A1%A8%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9#.E5.86.8D.E6.95.B4.E5.88.97.E5.8F.AF.E8.83.BD.E3.81.AA.E8.A1.A8
この処理はawkでも可能なことは可能だったんですが、無知なせいか
おそろしく不格好になりました。
>>306
それ思いました。できれば
07月07日->[[7月7日|07月07日]]
のように処理したいです。
308デフォルトの名無しさん
2009/08/06(木) 18:26:07 >>303
それです。そういう意味です。
それです。そういう意味です。
309デフォルトの名無しさん
2009/08/06(木) 21:17:06 # gawk による match 関数の拡張を使っている.
# 一行に複数回現れた場合は無視.
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", $0, a[2], a[1], a[2], a[1]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", $0, a[2], a[1]));
}
}
print $0;
}
# 一行に複数回現れた場合は無視.
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", $0, a[2], a[1], a[2], a[1]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", $0, a[2], a[1]));
}
}
print $0;
}
310309
2009/08/06(木) 21:21:15 # 訂正.
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", a[1], a[2], a[1], a[2]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", a[1], a[2]));
}
}
print $0;
}
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", a[1], a[2], a[1], a[2]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", a[1], a[2]));
}
}
print $0;
}
311デフォルトの名無しさん
2009/08/06(木) 23:59:03 >>310 完璧です。今度からこれを使います有難うございました。
$ cat test.txt
1月1日 #m月d日
01月1日 #0m月d日
1月01日 #m月0d日
01月01日 #0m月0d日
2月10日 #m月dd日
02月10日 #0m月dd日
11月3日 #mm月d日
11月03日 #mm月0d日
12月16日 #mm月dd日
$ awk -f test.awk test.txt
[[1月1日|01月01日]] #m月d日
[[1月1日|01月01日]] #0m月d日
[[1月1日|01月01日]] #m月0d日
[[1月1日|01月01日]] #0m月0d日
[[2月10日|02月10日]] #m月dd日
[[2月10日|02月10日]] #0m月dd日
[[11月3日|11月03日]] #mm月d日
[[11月3日|11月03日]] #mm月0d日
[[12月16日]] #mm月dd日
$ cat test.txt
1月1日 #m月d日
01月1日 #0m月d日
1月01日 #m月0d日
01月01日 #0m月0d日
2月10日 #m月dd日
02月10日 #0m月dd日
11月3日 #mm月d日
11月03日 #mm月0d日
12月16日 #mm月dd日
$ awk -f test.awk test.txt
[[1月1日|01月01日]] #m月d日
[[1月1日|01月01日]] #0m月d日
[[1月1日|01月01日]] #m月0d日
[[1月1日|01月01日]] #0m月0d日
[[2月10日|02月10日]] #m月dd日
[[2月10日|02月10日]] #0m月dd日
[[11月3日|11月03日]] #mm月d日
[[11月3日|11月03日]] #mm月0d日
[[12月16日]] #mm月dd日
312デフォルトの名無しさん
2009/08/07(金) 06:34:47 最初にそういうテストバターンを出そうね
313デフォルトの名無しさん
2009/08/07(金) 11:45:35 ここの住人がコーディング好きだからって甘えやがって(´・ω・`)
> perlならわりと簡単なのですが、awkで簡単にいきますか?
って言ってるんだから、「いきます」って答えりゃいいんだよな
> perlならわりと簡単なのですが、awkで簡単にいきますか?
って言ってるんだから、「いきます」って答えりゃいいんだよな
314デフォルトの名無しさん
2009/08/07(金) 11:46:39 >>312
なにその死の行進こわい
なにその死の行進こわい
315デフォルトの名無しさん
2009/08/15(土) 11:36:30 バターン テストのデスマーチ
316デフォルトの名無しさん
2009/08/16(日) 09:46:09 自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L
名言集 その3
『いつもサボってばかりのキャップがウゼえ』
http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 71 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:58:57.28 ID:PVAf+dux0
> >>69
> 大変って言うか
> 毎日、報告されたのを見て、判断して、処理して、完了報告して、以下ループ。
> ちょっとでもミスすると、普段は作業もしてないキャップさんたちがさんざん文句言ってきて
> その言いわけを考えないと、キャップはく奪されたりアカウント凍結されたりするから
>
> 登録されてから一年以上経って、やっといいたいこと言えるようになってきたよ。
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
名言集 その3
『いつもサボってばかりのキャップがウゼえ』
http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 71 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:58:57.28 ID:PVAf+dux0
> >>69
> 大変って言うか
> 毎日、報告されたのを見て、判断して、処理して、完了報告して、以下ループ。
> ちょっとでもミスすると、普段は作業もしてないキャップさんたちがさんざん文句言ってきて
> その言いわけを考えないと、キャップはく奪されたりアカウント凍結されたりするから
>
> 登録されてから一年以上経って、やっといいたいこと言えるようになってきたよ。
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
318デフォルトの名無しさん
2009/10/24(土) 17:23:04 最後の10行を処理したくない場合、どう書けば良いでしょうか?
319デフォルトの名無しさん
2009/10/24(土) 18:19:03 最後まで読まずに最後の10行かどうか判定する方法は無いだろうな
処理対象がファイルなら、事前にwc -lか何かで行数調べて awk に渡してみては
処理対象がファイルなら、事前にwc -lか何かで行数調べて awk に渡してみては
320デフォルトの名無しさん
2009/10/24(土) 18:52:07 成る程、これ、という方法は無さそうですね
ちょっと考えながらやってみます
ちょっと考えながらやってみます
321デフォルトの名無しさん
2009/10/24(土) 19:15:52 とりあえず、こんな感じにしました
BEGIN {
SKIPTAILS = 10
}
{
line = buf[1]
for(i=1;i<SKIPTAILS;i++) buf[i] = buf[i+1]
buf[SKIPTAILS] = $0
}
NR > SKIPTAILS {
# lineを処理
}
BEGIN {
SKIPTAILS = 10
}
{
line = buf[1]
for(i=1;i<SKIPTAILS;i++) buf[i] = buf[i+1]
buf[SKIPTAILS] = $0
}
NR > SKIPTAILS {
# lineを処理
}
322デフォルトの名無しさん
2009/10/24(土) 22:11:41 >>321 考え方は同じだけど、forが気になったので
リングバッファで処理するようにしてみた。
BEGIN {
SKIPTAILS = 10
ringpos = SKIPTAILS
}
{
ringpos = (ringpos + 1) % SKIPTAILS
line = buf[ringpos]
buf[ringpos] = $0
}
NR > SKIPTAILS {
# lineを処理
}
リングバッファで処理するようにしてみた。
BEGIN {
SKIPTAILS = 10
ringpos = SKIPTAILS
}
{
ringpos = (ringpos + 1) % SKIPTAILS
line = buf[ringpos]
buf[ringpos] = $0
}
NR > SKIPTAILS {
# lineを処理
}
323デフォルトの名無しさん
2009/10/24(土) 23:18:06 ありがとうございます
リングバッファ、勉強になりました
使わせて頂きます
リングバッファ、勉強になりました
使わせて頂きます
324デフォルトの名無しさん
2009/11/19(木) 20:22:22325デフォルトの名無しさん
2009/11/23(月) 12:06:14 質問です
gawkで
{
printf("%d,%s\n", NR, $0 ) > FILENAME;
}
という行頭に番号を振って保存する処理をして
batファイルで一括処理させようとしたんですが
c:\windows\gawk\gawk -f g:\作業用\n.awk g:\作業用\*.txt
実行結果が
ファイル1 ファイル2
1A 4D
2B 5E
3C 6F
になります
ファイル2も
1D
2E
3F
にするにはどうしたらよいでしょうか?
gawkで
{
printf("%d,%s\n", NR, $0 ) > FILENAME;
}
という行頭に番号を振って保存する処理をして
batファイルで一括処理させようとしたんですが
c:\windows\gawk\gawk -f g:\作業用\n.awk g:\作業用\*.txt
実行結果が
ファイル1 ファイル2
1A 4D
2B 5E
3C 6F
になります
ファイル2も
1D
2E
3F
にするにはどうしたらよいでしょうか?
326デフォルトの名無しさん
2009/11/23(月) 12:27:22 FNR
327デフォルトの名無しさん
2009/11/23(月) 12:35:21328デフォルトの名無しさん
2009/12/21(月) 13:53:34 年末にパソコンを買い換えようと思って機種選びをしていてふと気づいた、
あれ、vaioのOSがWindows7 64bitバージョンに・・・
ダメじゃん!gawkが使えなくなってしまう・・・
うーん、、、またXPを買うべきか・・・悩む・・・
あれ、vaioのOSがWindows7 64bitバージョンに・・・
ダメじゃん!gawkが使えなくなってしまう・・・
うーん、、、またXPを買うべきか・・・悩む・・・
329デフォルトの名無しさん
2009/12/21(月) 14:21:01 >>328
自分でコンパイルし直せばいいだけじゃないの?
自分でコンパイルし直せばいいだけじゃないの?
330デフォルトの名無しさん
2010/01/14(木) 03:52:20 プログラミング言語AWK復刊だってね。
ttp://slashdot.jp/developers/article.pl?sid=10/01/06/0345207
多分必要性を感じない程度には使ってるから、買わないけど嬉しい。
布教用に買うってのもちょっとな。
ttp://slashdot.jp/developers/article.pl?sid=10/01/06/0345207
多分必要性を感じない程度には使ってるから、買わないけど嬉しい。
布教用に買うってのもちょっとな。
331デフォルトの名無しさん
2010/02/28(日) 11:08:56 AAA BBB CCC … -O ZZZ YYY XXX …
awk新参です。
-O(オプション)を検索し、
-Oとそれ以降をリダイレクトしたいのですが…
良い方法、ありますでしょうか
awk新参です。
-O(オプション)を検索し、
-Oとそれ以降をリダイレクトしたいのですが…
良い方法、ありますでしょうか
332デフォルトの名無しさん
2010/02/28(日) 15:36:31 リダイレクトってどういう意味で使ってる?
その AAA で始まる文字列も一体どういうものなの。
コマンドライン引数なのか、ファイルから読み込んでくるのとか。
用語と状況はきちんと書いてくれ。
その AAA で始まる文字列も一体どういうものなの。
コマンドライン引数なのか、ファイルから読み込んでくるのとか。
用語と状況はきちんと書いてくれ。
333デフォルトの名無しさん
2010/02/28(日) 16:19:07 D:\My Documents\gawk\331>type 331.txt
AAA BBB CCC … -O ZZZ YYY XXX 0…
AAA BBB CCC … -O ZZZ YYY XXX 1…
AAA BBB CCC … -O ZZZ YYY XXX 2…
D:\My Documents\gawk\331>type 331.awk
{match($0, " -O .*", a);
print a[0];}
D:\My Documents\gawk\331>gawk -f 331.awk 331.txt >a.txt
D:\My Documents\gawk\331>type a.txt
-O ZZZ YYY XXX 0…
-O ZZZ YYY XXX 1…
-O ZZZ YYY XXX 2…
D:\My Documents\gawk\331>
AAA BBB CCC … -O ZZZ YYY XXX 0…
AAA BBB CCC … -O ZZZ YYY XXX 1…
AAA BBB CCC … -O ZZZ YYY XXX 2…
D:\My Documents\gawk\331>type 331.awk
{match($0, " -O .*", a);
print a[0];}
D:\My Documents\gawk\331>gawk -f 331.awk 331.txt >a.txt
D:\My Documents\gawk\331>type a.txt
-O ZZZ YYY XXX 0…
-O ZZZ YYY XXX 1…
-O ZZZ YYY XXX 2…
D:\My Documents\gawk\331>
334331
2010/02/28(日) 18:43:32335デフォルトの名無しさん
2010/02/28(日) 19:00:04 Q: make spits out errors like Makefile.awk:256: fatal: match() cannot have 3 arguments
A: Your AWK is too old to recreate the Makefile. The build is done based on the distributed Makefile. Everything shall compile successfully though.
So if the compile succeeds just ignore such errors, please.
A: Your AWK is too old to recreate the Makefile. The build is done based on the distributed Makefile. Everything shall compile successfully though.
So if the compile succeeds just ignore such errors, please.
336335
2010/02/28(日) 19:22:38 {print substr($0, match($0, " -O .*")+1);}
338デフォルトの名無しさん
2010/02/28(日) 22:25:50 ボソ 本当に勉強になったかどうかは疑問だ・・・
おっと一言オウかったか。
おっと一言オウかったか。
339デフォルトの名無しさん
2010/03/04(木) 15:04:38 gsub()とかで引数に変数を利用したいのですがどうすればいいのでしょうか?
gsub(str1,str2)みたいに。
gsub(str1,str2)みたいに。
340デフォルトの名無しさん
2010/03/04(木) 21:44:52 >>339
man gawkより
gsub(r, s [, t])
For each substring matching the regular expression r in the string t,
substitute the string s, and return the number of substitutions.
If t is not supplied, use $0. An & in the replacement text is
replaced with the text that was actually matched. Use \& to get a
literal &. (This must be typed as "\\&"; see GAWK: Effective AWK
Programming for a fuller discussion of the rules for &'s and
backslashes in the replacement text of sub(), gsub(), and gen sub().)
man gawkより
gsub(r, s [, t])
For each substring matching the regular expression r in the string t,
substitute the string s, and return the number of substitutions.
If t is not supplied, use $0. An & in the replacement text is
replaced with the text that was actually matched. Use \& to get a
literal &. (This must be typed as "\\&"; see GAWK: Effective AWK
Programming for a fuller discussion of the rules for &'s and
backslashes in the replacement text of sub(), gsub(), and gen sub().)
341デフォルトの名無しさん
2010/03/08(月) 21:36:03 awk 'BEGIN{x="ABCDE";y="BCD";z="XXX";gsub(y,z,x);print x}'
何が難しいのかよくわからん。
何が難しいのかよくわからん。
342デフォルトの名無しさん
2010/03/17(水) 22:07:37 時々awkだと遅いのでperlに書き換えるという人がいますが、
実際のところ速くなるんでしょうか?
私の環境ではforループや加算などはawkのほうが速そうですが、
どのような処理の場合にperlのほうが速くなりますか?
$ time mawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};printf("%f\n" ,x)}'
500000500000.000000
real 0m0.131s
user 0m0.120s
sys 0m0.000s
$ time gawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};print x}'
500000500000
real 0m0.289s
user 0m0.284s
sys 0m0.000s
$ time perl -e '$x=0;for($i=1;$i<=1000000;$i++){$x=$x+$i};print $x'
500000500000
real 0m0.379s
user 0m0.376s
sys 0m0.004s
実際のところ速くなるんでしょうか?
私の環境ではforループや加算などはawkのほうが速そうですが、
どのような処理の場合にperlのほうが速くなりますか?
$ time mawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};printf("%f\n" ,x)}'
500000500000.000000
real 0m0.131s
user 0m0.120s
sys 0m0.000s
$ time gawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};print x}'
500000500000
real 0m0.289s
user 0m0.284s
sys 0m0.000s
$ time perl -e '$x=0;for($i=1;$i<=1000000;$i++){$x=$x+$i};print $x'
500000500000
real 0m0.379s
user 0m0.376s
sys 0m0.004s
343デフォルトの名無しさん
2010/03/17(水) 22:26:14 >>342
「awkだと遅いのでperlに書き換えるという人」 に聞けば分かる
「awkだと遅いのでperlに書き換えるという人」 に聞けば分かる
344デフォルトの名無しさん
2010/03/19(金) 09:08:06345デフォルトの名無しさん
2010/03/20(土) 01:03:01 カーニハンとパイクの『プログラミング作法』にawkとperl
(とCとC++とJAVA)の比較があるな
今のマシン使って書き換えなきゃならないほど遅いって
どんな処理なんだろう?
(とCとC++とJAVA)の比較があるな
今のマシン使って書き換えなきゃならないほど遅いって
どんな処理なんだろう?
346デフォルトの名無しさん
2010/03/21(日) 13:44:10 >342
awk 等を組み合わせて実行するとプロセス起動のコストがかかるので perl で一つに纏める、という話じゃないの?
awk 等を組み合わせて実行するとプロセス起動のコストがかかるので perl で一つに纏める、という話じゃないの?
347デフォルトの名無しさん
2010/03/22(月) 17:35:11 文字コードのコードを変数にして文字列を操作することってできますか?
文字列中の全角文字を半角文字に変える華麗な方法を模索しています。
文字列中の全角文字を半角文字に変える華麗な方法を模索しています。
348デフォルトの名無しさん
2010/03/22(月) 18:01:58 Use iconv.
349デフォルトの名無しさん
2010/03/22(月) 18:25:10 > 文字コードのコードを変数にして文字列を操作することってできますか?
なにをしたいのかよくわかんないんだけど。
> 文字列中の全角文字を半角文字に変える華麗な方法を模索しています。
華麗なのはtrコマンドを使う方法。ただtrがマルチバイトをうまく扱ってくれるか
どうかはこころもとない。
Perlならtrを、Rubyなら文字列クラスのtrメソッドを、
Pythonならstringモジュールのmaketrans関数と文字列のメソッドtransleteを使う、
という手がある。
awkないし(tr以外の)古典的なツールで華麗にやる方法はないと思う。
なにをしたいのかよくわかんないんだけど。
> 文字列中の全角文字を半角文字に変える華麗な方法を模索しています。
華麗なのはtrコマンドを使う方法。ただtrがマルチバイトをうまく扱ってくれるか
どうかはこころもとない。
Perlならtrを、Rubyなら文字列クラスのtrメソッドを、
Pythonならstringモジュールのmaketrans関数と文字列のメソッドtransleteを使う、
という手がある。
awkないし(tr以外の)古典的なツールで華麗にやる方法はないと思う。
350デフォルトの名無しさん
2010/03/24(水) 17:11:16 Excelで
全角半角変換は ASC()
半角全角変換は JIS()
全角半角変換は ASC()
半角全角変換は JIS()
351デフォルトの名無しさん
2010/03/25(木) 08:34:11 >>347
1. EUC-JPにして(nkfとか)kakasi で、戻す
2. それだったら最初から、nkf -Z
3. gawk前提で、文字毎に処理(LANGを指定して子プロセス起動)
awkの中で閉じてやるのはめんどくさそう
1. EUC-JPにして(nkfとか)kakasi で、戻す
2. それだったら最初から、nkf -Z
3. gawk前提で、文字毎に処理(LANGを指定して子プロセス起動)
awkの中で閉じてやるのはめんどくさそう
352デフォルトの名無しさん
2010/03/29(月) 23:34:27 gawk 3.1.6
system(cmd) を使うと、アンチウィルスソフト(kaspersky)の
アプリケーション履歴にバッチファイルが登録されるのを発見。
close(cmd) しても同じ。
while(cmd|getline>0){}
で代用すると残らなくなった。??
system(cmd) を使うと、アンチウィルスソフト(kaspersky)の
アプリケーション履歴にバッチファイルが登録されるのを発見。
close(cmd) しても同じ。
while(cmd|getline>0){}
で代用すると残らなくなった。??
353デフォルトの名無しさん
2010/05/13(木) 00:22:57 仏でブルカ否定の決議採択 「国の価値観と相容れない」
http://www.cnn.co.jp/world/AIC201005120004.html
テヘランで、ブルカを着て入出国する時って、顔のチェックどうするんだろう。
他人や男でもばれないの?
http://www.cnn.co.jp/world/AIC201005120004.html
テヘランで、ブルカを着て入出国する時って、顔のチェックどうするんだろう。
他人や男でもばれないの?
354デフォルトの名無しさん
2010/05/13(木) 00:23:49 >>353
誤爆スマン
誤爆スマン
355デフォルトの名無しさん
2010/05/14(金) 13:38:24356デフォルトの名無しさん
2010/05/18(火) 10:51:40 awkのprintについてご教示下さい。
下のような出力が有った場合、例えば
lrwxrwxrwx 1 root root 70 May 18 10:37 hoge
ls -al | awk '{print$1$2$2$4$6$7$8$9}' とすれば「$5」の
「70」を抜くことが出来ますが、これが$100とかまで続く場合、
「$5」だけを抜きたい場合記述が大変になります。
何か良い方法は無いものでしょうか?
下のような出力が有った場合、例えば
lrwxrwxrwx 1 root root 70 May 18 10:37 hoge
ls -al | awk '{print$1$2$2$4$6$7$8$9}' とすれば「$5」の
「70」を抜くことが出来ますが、これが$100とかまで続く場合、
「$5」だけを抜きたい場合記述が大変になります。
何か良い方法は無いものでしょうか?
357デフォルトの名無しさん
2010/05/18(火) 11:01:32 $nに代入があると、その時点で$0が再構成される。
区切りの空白が$5のあったところだけ2個になるのが気にならなければ、
ls -al | awk '{$5 = ""; print}'
とすればよい。
空白2個を修正するならこうする。
ls -al | awk '{$5 = ""; print $0}' | awk '{$1 = $1; print}'
区切りの空白が$5のあったところだけ2個になるのが気にならなければ、
ls -al | awk '{$5 = ""; print}'
とすればよい。
空白2個を修正するならこうする。
ls -al | awk '{$5 = ""; print $0}' | awk '{$1 = $1; print}'
358デフォルトの名無しさん
2010/05/18(火) 11:03:15 $0 は余計だった。
ls -al | awk '{$5 = ""; print}' | awk '{$1 = $1; print}'
ls -al | awk '{$5 = ""; print}' | awk '{$1 = $1; print}'
359デフォルトの名無しさん
2010/05/18(火) 11:07:03 2つめのawkの$1 = $1は何のため?
360デフォルトの名無しさん
2010/05/18(火) 11:34:06 なにもしないと、$0は読み込んだそのままなので空白2個は空白2個のまま。
$1=$1で代入してやると、$1, $2, ...を空白1個でつないだものが$0に代入されるので、
空白2個だったところが空白1個になる。
$1=$1で代入してやると、$1, $2, ...を空白1個でつないだものが$0に代入されるので、
空白2個だったところが空白1個になる。
361デフォルトの名無しさん
2010/05/18(火) 11:35:04 2つめのawkに食わせた時点で$n (n>0)は詰まるけど$0は入力行そのまま
空白2個なので$0を再構成すると空白1個区切りになる
空白2個なので$0を再構成すると空白1個区切りになる
362デフォルトの名無しさん
2010/05/18(火) 12:21:12363デフォルトの名無しさん
2010/05/18(火) 15:08:38 $1 = $1 ってイマイチよく解らん
$1ってFSで区切られた一つ目だよね?
なんでそれ自身を自分に代入したらスペースが消えるん?
$1ってFSで区切られた一つ目だよね?
なんでそれ自身を自分に代入したらスペースが消えるん?
364デフォルトの名無しさん
2010/05/18(火) 15:27:35 $0の再構成が行われるからって説明されてるだろ。
$0の再構成とはいったんばらした$1,$2,...をOFSを挟んで
つなげ直すってことなので、何で区切られていたかは
保存されない。
$0の再構成とはいったんばらした$1,$2,...をOFSを挟んで
つなげ直すってことなので、何で区切られていたかは
保存されない。
365デフォルトの名無しさん
2010/05/18(火) 15:41:56366デフォルトの名無しさん
2010/05/18(火) 15:42:39 ちょっと気になって試してみた。
% echo a b | gawk '{OFS="-";$1=$1;OFS="=";print}'
a=b
再構成は$1=$1をやってすぐじゃなくて、次に$0が使われるとき、ってこと
なのかな?
% echo a b | gawk '{OFS="-";$1=$1;OFS="=";print}'
a=b
再構成は$1=$1をやってすぐじゃなくて、次に$0が使われるとき、ってこと
なのかな?
367365
2010/05/18(火) 16:27:59 解った
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html
警告: 一部のバージョンのawkは NFを減じたときに$0の再構築を行わない。
結局のところ、awkにレコード全体の再構築を強制したときにはその時点で
フィールドの値とOFSが使われる。再構築を行うためには、何らかの無害な
代入を行う:
$1 = $1 # force record to be reconstituted
賢くなった。あんがと。
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html
警告: 一部のバージョンのawkは NFを減じたときに$0の再構築を行わない。
結局のところ、awkにレコード全体の再構築を強制したときにはその時点で
フィールドの値とOFSが使われる。再構築を行うためには、何らかの無害な
代入を行う:
$1 = $1 # force record to be reconstituted
賢くなった。あんがと。
368デフォルトの名無しさん
2010/05/18(火) 16:46:58 awkは奧が深いのぉ
369デフォルトの名無しさん
2010/05/19(水) 22:24:52 久しぶりにいいもんを見させてもらいますた><
370デフォルトの名無しさん
2010/05/24(月) 09:55:14 知らなかった。
勉強になった。
勉強になった。
371デフォルトの名無しさん
2010/05/24(月) 15:25:46 みんな>357のお蔭で多くを学んだな。
372デフォルトの名無しさん
2010/05/29(土) 04:53:07 名前:
E-mail:
内容:
cygwinだと
% cut -f1 -d, hoge.csv
より
% awk -F, '{print $1}' hoge.csv
の方が速かった。
#実行時間ね
#Perl?シラネ
E-mail:
内容:
cygwinだと
% cut -f1 -d, hoge.csv
より
% awk -F, '{print $1}' hoge.csv
の方が速かった。
#実行時間ね
#Perl?シラネ
373デフォルトの名無しさん
2010/06/07(月) 11:45:38374デフォルトの名無しさん
2010/06/07(月) 12:04:05 手元のlinux環境だとcutの方が速いという普通の結果でしたが。
hoge.csvは6桁の乱数3つを「,]で区切って並べた100万行の
ファイルです。
% time cut -f1 -d, hoge.csv >/dev/null
cut -f1 -d, hoge.csv > /dev/null 0.21s user 0.01s system 99% cpu 0.222 total
% time awk -F, '{print $1}' hoge.csv >/dev/nulll
awk -F, '{print $1}' hoge.csv > /dev/nulll 1.52s user 0.03s system 99% cpu 1.558 total
ちなみにバージョンは
cut (GNU coreutils) 8.5
GNU Awk 3.1.7
hoge.csvは6桁の乱数3つを「,]で区切って並べた100万行の
ファイルです。
% time cut -f1 -d, hoge.csv >/dev/null
cut -f1 -d, hoge.csv > /dev/null 0.21s user 0.01s system 99% cpu 0.222 total
% time awk -F, '{print $1}' hoge.csv >/dev/nulll
awk -F, '{print $1}' hoge.csv > /dev/nulll 1.52s user 0.03s system 99% cpu 1.558 total
ちなみにバージョンは
cut (GNU coreutils) 8.5
GNU Awk 3.1.7
375デフォルトの名無しさん
2010/06/07(月) 12:22:48 あーなるほど、なんか判った。cygwinのfgetc()が遅いからじゃないかな。
fgetc()とfgets()で時間を較べたときにfgetc()の方がずっと遅かった記憶がある。
fgetc()とfgets()で時間を較べたときにfgetc()の方がずっと遅かった記憶がある。
376デフォルトの名無しさん
2010/09/13(月) 14:14:54 xgawk (gawkでなく)にとあるwebページを食べさせると、XMLERRR (not well-formed)で中断します。
そのページがwell-formedか極悪かは私にとってどうでもよく、単に内容を得たいだけなので、文末まで処理し終えて欲しいのです。
どうにかならないでしょうか。
そのページがwell-formedか極悪かは私にとってどうでもよく、単に内容を得たいだけなので、文末まで処理し終えて欲しいのです。
どうにかならないでしょうか。
377デフォルトの名無しさん
2010/09/25(土) 14:55:22 シェルスクリプト内でパイプ入力されたものを処理する
アクションをヒアドキュメントで書く事は出来るでしょうか。
アクションをヒアドキュメントで書く事は出来るでしょうか。
378デフォルトの名無しさん
2010/09/27(月) 14:57:18 質問です。
データが
|1|aaa|
|2|bbb|
|3|ccc|
などとなっているとき
aaa
bbb
ccc
を取り出そうとして
awk 'FS="|"{print $3}' ファイル名
としたんですが、1行目だけがうまくとれません。
データファイルの1行目を空行にすれば解決できないことはないんですが、
空行を入れ忘れてしまう懸念があります。
どうすればいいんでしょうか?
データが
|1|aaa|
|2|bbb|
|3|ccc|
などとなっているとき
aaa
bbb
ccc
を取り出そうとして
awk 'FS="|"{print $3}' ファイル名
としたんですが、1行目だけがうまくとれません。
データファイルの1行目を空行にすれば解決できないことはないんですが、
空行を入れ忘れてしまう懸念があります。
どうすればいいんでしょうか?
379デフォルトの名無しさん
2010/09/27(月) 15:01:46 やりたいことは awk 'BEGIN {FS="|"} {print $3}' じゃないかと思うんだけど
380デフォルトの名無しさん
2010/09/27(月) 15:08:38381デフォルトの名無しさん
2010/09/27(月) 18:42:12 gensub()にて、マッチした10番目以降のグループの指定の仕方を教えてください。
下記サイトでは、17番目まで普通に指定できるような事が書いてあるけど、
http://tounderlinedk.blogspot.com/2010/08/gensub-n-awk.html
gensub(pattern,"\\10","g",$2) とかくと
\\1(マッチ箇所)と0(文字)として解釈されちゃって上手くいなかい。
シェルスクリプト風かと思って、\\{10} も試したけどダメダッター。
GNU Awk 3.1.5です。
下記サイトでは、17番目まで普通に指定できるような事が書いてあるけど、
http://tounderlinedk.blogspot.com/2010/08/gensub-n-awk.html
gensub(pattern,"\\10","g",$2) とかくと
\\1(マッチ箇所)と0(文字)として解釈されちゃって上手くいなかい。
シェルスクリプト風かと思って、\\{10} も試したけどダメダッター。
GNU Awk 3.1.5です。
382381
2010/09/27(月) 19:00:47 BSDのjmanには、1から9までの数字って明記されてるなあ。
実装によって違うのかなあ
パターンを動的に生成してマッチさせようとしてるから結構困る(´・ω・`)
http://www.linux.or.jp/JM/html/GNU_gawk/man1/gawk.1.html
実装によって違うのかなあ
パターンを動的に生成してマッチさせようとしてるから結構困る(´・ω・`)
http://www.linux.or.jp/JM/html/GNU_gawk/man1/gawk.1.html
383デフォルトの名無しさん
2010/09/27(月) 19:04:47 >>381
マニュアルには1から9までって書いてあるし
Within the replacement text s, the sequence \n, where n is a digit from 1 to 9, may be
used to indicate just the text that matched the n'th parenthesized subexpression.
ソースの該当箇所(builtin.cの2542行目あたりから)みても1桁限定のロジックだよ。(3.1.7調べ)
int dig = scan[1] - '0';
なんてやってる。
マニュアルには1から9までって書いてあるし
Within the replacement text s, the sequence \n, where n is a digit from 1 to 9, may be
used to indicate just the text that matched the n'th parenthesized subexpression.
ソースの該当箇所(builtin.cの2542行目あたりから)みても1桁限定のロジックだよ。(3.1.7調べ)
int dig = scan[1] - '0';
なんてやってる。
384デフォルトの名無しさん
2010/09/27(月) 19:08:03 一旦ぶった切るしかないんじゃね
386デフォルトの名無しさん
2010/09/27(月) 21:27:29 >>381
なんでそこのひとは16までできたんだ?
なんでそこのひとは16までできたんだ?
387デフォルトの名無しさん
2010/09/28(火) 00:32:52 10の代わりに:を使っていたりして。
388デフォルトの名無しさん
2010/09/28(火) 03:15:24 このスレが盛況なのが珍しいから
記念パピコ。
記念パピコ。
389デフォルトの名無しさん
2010/09/28(火) 03:41:50 15年以上前だけどawkの勉強始めて同時にperlの勉強もしてたら
気付いたらperlばっかりやっててawkすっかり忘れてしまったなぁ
今はperl捨てて専らpythonやってるけどawkもいいよね
気付いたらperlばっかりやっててawkすっかり忘れてしまったなぁ
今はperl捨てて専らpythonやってるけどawkもいいよね
390デフォルトの名無しさん
2010/09/28(火) 09:40:13 Busyboxに組み込めば、それこそ炊飯器や冷蔵庫でも動くからなあ。
手軽であるにも関わらず、結構高度な処理もガリガリ書けるから好き。
Cとシェルスクリプトが好きだから、文法的にもしっくり来る。
上位互換のPerlも大好き。
手軽であるにも関わらず、結構高度な処理もガリガリ書けるから好き。
Cとシェルスクリプトが好きだから、文法的にもしっくり来る。
上位互換のPerlも大好き。
391デフォルトの名無しさん
2010/09/28(火) 14:37:59 >>376ですが、誰もかまってくれないので寂しさで死にそうです。
392デフォルトの名無しさん
2010/09/28(火) 14:52:08393デフォルトの名無しさん
2010/09/28(火) 17:23:08 jawkがjwalkに見えてしまう
394デフォルトの名無しさん
2010/10/01(金) 11:21:26 動く環境の多さ順にインタプリタを選ぶんなら、
シェルスクリプト > awk >>> perl >>>>> python >>>>> ruby >>> haskel etc.
となるだろうな。
シェルスクリプトはシェル依存な部分が多く、perl ほど高機能なものも要らない。
そんな時、小さな端末でもスマートに動いてくれる awk にちんこ勃つ。
>>389
言語に捨てるも拾うもないよ。その時々に都合の良いものを組み合わせて使うのがUNIX的な発想。
シェルスクリプト > awk >>> perl >>>>> python >>>>> ruby >>> haskel etc.
となるだろうな。
シェルスクリプトはシェル依存な部分が多く、perl ほど高機能なものも要らない。
そんな時、小さな端末でもスマートに動いてくれる awk にちんこ勃つ。
>>389
言語に捨てるも拾うもないよ。その時々に都合の良いものを組み合わせて使うのがUNIX的な発想。
395デフォルトの名無しさん
2010/10/01(金) 15:33:40 >>394
「一発やろう」ですね!
「一発やろう」ですね!
396デフォルトの名無しさん
2010/10/09(土) 04:40:48 awk最近勉強してる。perlより全然簡単。
これなら俺でも挫折しなくてすみそう
これなら俺でも挫折しなくてすみそう
397デフォルトの名無しさん
2010/10/09(土) 04:57:14 >>396 がんば!
398デフォルトの名無しさん
2010/10/21(木) 20:16:46 sjisで書いた
/ー/{print}
を実行すると
awk:
awk: ^ 正規表現が終端されていません。
awk: 致命的: [ または [^ が対応しません。: /[/{print}/
のエラーになってしまいます。
ーの2バイト目が[なせいだと思いますが、どう対応したらいいでしょうか?
入力ファイルはsjisで書かれていて、文字コード変換はできません。
/ー/{print}
を実行すると
awk:
awk: ^ 正規表現が終端されていません。
awk: 致命的: [ または [^ が対応しません。: /[/{print}/
のエラーになってしまいます。
ーの2バイト目が[なせいだと思いますが、どう対応したらいいでしょうか?
入力ファイルはsjisで書かれていて、文字コード変換はできません。
399デフォルトの名無しさん
2010/10/21(木) 20:55:41 >>398
環境の問題なんだから、実行環境くらいまともに書けよ。
環境の問題なんだから、実行環境くらいまともに書けよ。
400デフォルトの名無しさん
2010/10/21(木) 21:38:24 >>398
gawk を使う
gawk を使う
401デフォルトの名無しさん
2010/10/21(木) 22:52:57 環境はCentOS-5.5-x86_64でGNU Awk 3.1.5です。
/bin/awkはシンボリックリンクで、実体はgawkでした。
/bin/awkはシンボリックリンクで、実体はgawkでした。
402デフォルトの名無しさん
2010/10/21(木) 23:49:35 >>401
--help 嫁
--help 嫁
403デフォルトの名無しさん
2010/10/22(金) 01:41:07 Windows7(64bit)で使えるawkありますか?
404デフォルトの名無しさん
2010/10/22(金) 02:19:30 32bit版のawkをを使うんじゃダメ?
405398
2010/10/22(金) 07:32:34 こうすることで対応できました。
/\x81\[/{print}
/\x81\[/{print}
406デフォルトの名無しさん
2010/10/22(金) 09:41:36 それでいいなら、/ー[]/でもいい希ガス。
根本的な解決になってないけどねぇ。
根本的な解決になってないけどねぇ。
407デフォルトの名無しさん
2010/10/22(金) 13:52:10 シングルクオーテーションやダブルクオーテーションの使い分けじゃね〜
408398
2010/10/22(金) 19:55:53 根本的な解決するとしたら文字コードを変えることでしょうか?
409デフォルトの名無しさん
2010/10/22(金) 20:03:18 日本語の文字コードに対応してるawkを使う、という方法もある。
今あるのかどうか知らないけど。
今あるのかどうか知らないけど。
410デフォルトの名無しさん
2010/10/22(金) 20:28:38 今のgawkは普通にUnicode対応してるみたい
$ echo 'てすと' | gawk '/[ぁ-ん]/ { print length($0) }'
3
UTF-8ロケールでしか試してないけど
cygwinでも大丈夫
$ echo 'てすと' | gawk '/[ぁ-ん]/ { print length($0) }'
3
UTF-8ロケールでしか試してないけど
cygwinでも大丈夫
411デフォルトの名無しさん
2010/10/23(土) 01:29:00 >>404
gawkでいいかな
gawkでいいかな
412399
2010/10/23(土) 06:55:10 >>405
問題は解決したのかもしらんが、一応。
以下2つのWin用バイナリは問題ないので、ソースもらってLinux上でコンパイルしてみたら?
ttp://gnuwin32.sourceforge.net/packages/gawk.htm
ttp://www.kt.rim.or.jp/~kbk/gawk-3.1/
問題は解決したのかもしらんが、一応。
以下2つのWin用バイナリは問題ないので、ソースもらってLinux上でコンパイルしてみたら?
ttp://gnuwin32.sourceforge.net/packages/gawk.htm
ttp://www.kt.rim.or.jp/~kbk/gawk-3.1/
413398
2010/10/23(土) 10:53:14 サーバ管理者じゃないのでサーバをいじることはできないです。
これにしたらsjisでも動くようになるのでしょうか?
これにしたらsjisでも動くようになるのでしょうか?
414デフォルトの名無しさん
2010/10/23(土) 12:27:19 >>413
少なくとも自分が試したWindows2003上ではな。
▽tes.awk ※sjis
/ー/{print}
△
CentOS5.5上
$ gawk -f tes.awk readme.ja
awk: tes.awk:1:
awk: tes.awk:1: ^ 正規表現が終端されていません。
awk: tes.awk:1: 致命的: [ または [^ が対応しません。: /[/{print}/
Windows2003上
> gawk -f tes.awk readme.ja
⇒マッチした物が表示される
Linux上でロケールをsjis.japaneseとかにすればいいのかと思ったが、ロケール変更自体がうまくいかなかったわ。
困ってる事があるなら、最終的に何がしたいか言ったほうがいいよ。
少なくとも自分が試したWindows2003上ではな。
▽tes.awk ※sjis
/ー/{print}
△
CentOS5.5上
$ gawk -f tes.awk readme.ja
awk: tes.awk:1:
awk: tes.awk:1: ^ 正規表現が終端されていません。
awk: tes.awk:1: 致命的: [ または [^ が対応しません。: /[/{print}/
Windows2003上
> gawk -f tes.awk readme.ja
⇒マッチした物が表示される
Linux上でロケールをsjis.japaneseとかにすればいいのかと思ったが、ロケール変更自体がうまくいかなかったわ。
困ってる事があるなら、最終的に何がしたいか言ったほうがいいよ。
415398
2010/10/23(土) 12:40:31 Windows2003だとちゃんと動くんですね。
困っていたことは405で解決したので大丈夫です。
今は「根本的な解決」に興味があったのでお聞きした次第です。
困っていたことは405で解決したので大丈夫です。
今は「根本的な解決」に興味があったのでお聞きした次第です。
416初心者
2010/11/04(木) 22:14:10 awkでシェルのPATH変数をマッチさせるときにスラッシュ//を使わない方法を教えていただけませんか?
417デフォルトの名無しさん
2010/11/04(木) 23:14:10 >>416
初心者だからマルチが許されるとでも思ったか?
初心者だからマルチが許されるとでも思ったか?
418初心者
2010/11/05(金) 06:32:09 ごめんなさい!
知りませんでした。
知りませんでした。
419デフォルトの名無しさん
2010/12/15(水) 01:54:35 配列の要素数を調べるなら、ループ処理しないと分からない?
length みたいなのは無い?
length みたいなのは無い?
420デフォルトの名無しさん
2010/12/15(水) 02:27:50 あるよ。まさしく、length(array)。
421デフォルトの名無しさん
2010/12/15(水) 02:42:46 そんなもんねぇよw
と思ったらgawkにはあるのか
length([s]) Returns the length of the string s, or the
length of $0 if s is not supplied. Starting
with version 3.1.5, as a non-standard exten-
sion, with an array argument, length() returns
the number of elements in the array.
と思ったらgawkにはあるのか
length([s]) Returns the length of the string s, or the
length of $0 if s is not supplied. Starting
with version 3.1.5, as a non-standard exten-
sion, with an array argument, length() returns
the number of elements in the array.
422デフォルトの名無しさん
2010/12/15(水) 04:20:37 むしろ配列が存在するってことはその配列を作成する過程があるだろ?
作成するときに数えればいいんじゃね?
作成するときに数えればいいんじゃね?
423デフォルトの名無しさん
2010/12/15(水) 08:40:15 連想配列だったら数えないのが普通だがな
424419
2010/12/25(土) 03:12:23 function で処理する時、配列だけではダメで要素数まで必要なんだかなぁ、
って事が分かりますた
って事が分かりますた
425デフォルトの名無しさん
2010/12/28(火) 11:29:35 function に渡すだけなら要素数なんていらないんじゃない?
426デフォルトの名無しさん
2010/12/28(火) 13:55:13 $1 = $1みたいなトリックを見る度に奥が深いと言うよりは糞に見えてきます
翻すとUNIX文化そのものが
まあ、あくまでおれの主観ですがね
翻すとUNIX文化そのものが
まあ、あくまでおれの主観ですがね
427デフォルトの名無しさん
2010/12/28(火) 15:24:21428デフォルトの名無しさん
2010/12/28(火) 15:28:13 >>427
全角英字使う奴が awk 大好きだとは到底思えん
全角英字使う奴が awk 大好きだとは到底思えん
429デフォルトの名無しさん
2011/01/05(水) 23:22:55 まあ冬休み期間だものね。
430デフォルトの名無しさん
2011/01/06(木) 00:22:04 ▼tes09.awk
BEGIN{
if (ARGV[1]=="")
ARGV[1]="hoge.txt"
while (getline < ARGV[1] > 0) print "BEGIN\t"$0
}
ARGV[1]=="hoge.txt"{
print "BODY\t"$0
}
★質問
上記スクリプトを引数を付けた場合と付けない場合をそれぞれ実行しました。
▼gawk -f tes09.awk hoge.txt
BEGIN arima_yuuichi@example.com
BEGIN ooizumi_sadawo@example.com
BEGIN taguchi_kenji@example.com
BODY arima_yuuichi@example.com
BODY ooizumi_sadawo@example.com
BODY taguchi_kenji@example.com
▼gawk -f tes09.awk
BEGIN arima_yuuichi@example.com
BEGIN ooizumi_sadawo@example.com
BEGIN taguchi_kenji@example.com
ここで、BEGIN句での ARGV[1]="hoge.txt" という代入を本編(?)でも有効にする為
にはどうすればいいでしょうか?
BEGIN{
if (ARGV[1]=="")
ARGV[1]="hoge.txt"
while (getline < ARGV[1] > 0) print "BEGIN\t"$0
}
ARGV[1]=="hoge.txt"{
print "BODY\t"$0
}
★質問
上記スクリプトを引数を付けた場合と付けない場合をそれぞれ実行しました。
▼gawk -f tes09.awk hoge.txt
BEGIN arima_yuuichi@example.com
BEGIN ooizumi_sadawo@example.com
BEGIN taguchi_kenji@example.com
BODY arima_yuuichi@example.com
BODY ooizumi_sadawo@example.com
BODY taguchi_kenji@example.com
▼gawk -f tes09.awk
BEGIN arima_yuuichi@example.com
BEGIN ooizumi_sadawo@example.com
BEGIN taguchi_kenji@example.com
ここで、BEGIN句での ARGV[1]="hoge.txt" という代入を本編(?)でも有効にする為
にはどうすればいいでしょうか?
431デフォルトの名無しさん
2011/01/06(木) 00:31:45 なにもしなくても有効だと思うんだけど
質問の趣旨がわからん
質問の趣旨がわからん
432430
2011/01/06(木) 06:20:53 分かり辛くてすみません。
hoge.txtの中身は下記です。
▼
arima_yuuichi@example.com
ooizumi_sadawo@example.com
taguchi_kenji@example.com
>>430はWin32のバイナリ「GNU Awk 3.1.7(windows special Nov 24 2009)」を使用した結果です。
下のほうの実行結果では、BEGIN句でのARGV[1]への代入はBEGIN句では有効ですが、
本編では有効になっていないので出力されていないように見えます。
ちなみに、CentOS5.5上の GNU Awk 3.1.5 では下記エラーになりました。
▼
gawk: tes09.awk:2: if (ARGV[1]=="")
gawk: tes09.awk:2: ^ 表現の char '・' は不正です。
hoge.txtの中身は下記です。
▼
arima_yuuichi@example.com
ooizumi_sadawo@example.com
taguchi_kenji@example.com
>>430はWin32のバイナリ「GNU Awk 3.1.7(windows special Nov 24 2009)」を使用した結果です。
下のほうの実行結果では、BEGIN句でのARGV[1]への代入はBEGIN句では有効ですが、
本編では有効になっていないので出力されていないように見えます。
ちなみに、CentOS5.5上の GNU Awk 3.1.5 では下記エラーになりました。
▼
gawk: tes09.awk:2: if (ARGV[1]=="")
gawk: tes09.awk:2: ^ 表現の char '・' は不正です。
433デフォルトの名無しさん
2011/01/06(木) 08:57:49 入力レコードが1件も無いからでしょ
>gawk: tes09.awk:2: ^ 表現の char '・' は不正です。
これは全角スペース
>gawk: tes09.awk:2: ^ 表現の char '・' は不正です。
これは全角スペース
434デフォルトの名無しさん
2011/01/06(木) 09:12:00 >BEGIN arima_yuuichi@example.com
>BEGIN ooizumi_sadawo@example.com
>BEGIN taguchi_kenji@example.com
コレはgetlineで読んで出力したもの
>BODY arima_yuuichi@example.com
>BODY ooizumi_sadawo@example.com
>BODY taguchi_kenji@example.com
コレはコマンドで指定したファイルから出力したもの
たとえば
{
print "BODY\t"$0
}
としてやれば明らか
>BEGIN ooizumi_sadawo@example.com
>BEGIN taguchi_kenji@example.com
コレはgetlineで読んで出力したもの
>BODY arima_yuuichi@example.com
>BODY ooizumi_sadawo@example.com
>BODY taguchi_kenji@example.com
コレはコマンドで指定したファイルから出力したもの
たとえば
{
print "BODY\t"$0
}
としてやれば明らか
435デフォルトの名無しさん
2011/01/06(木) 13:46:53 質問の趣旨は、プログラム(スクリプト)の中で入力ファイル等の
コマンドライン引数を追加したいという事ですか。
コマンドライン引数の配列は ARGV ですが、コマンドライン引数の
個数を格納する ARGC という組み込み変数があります。
ARGV配列を追加したら一緒に ARGC を修正してあげないと、awkは配列が
追加された事を認識しません。
BEGIN内でARGV配列を追加した分だけARGCをインクルメントしてあげれば
追加されたARGV配列で指定されたファイルも本文の処理に渡されます。
蛇足としては、
現在処理中のファイル名が格納されている配列 ARGV のインデックスを
示す組み込み変数は ARGIND です。
私のは Win版の gawkm115 です。スクリプト内でARGV/ARGCを操作しても
期待通り正常に動きますよ。
試してみてね。
コマンドライン引数を追加したいという事ですか。
コマンドライン引数の配列は ARGV ですが、コマンドライン引数の
個数を格納する ARGC という組み込み変数があります。
ARGV配列を追加したら一緒に ARGC を修正してあげないと、awkは配列が
追加された事を認識しません。
BEGIN内でARGV配列を追加した分だけARGCをインクルメントしてあげれば
追加されたARGV配列で指定されたファイルも本文の処理に渡されます。
蛇足としては、
現在処理中のファイル名が格納されている配列 ARGV のインデックスを
示す組み込み変数は ARGIND です。
私のは Win版の gawkm115 です。スクリプト内でARGV/ARGCを操作しても
期待通り正常に動きますよ。
試してみてね。
436430
2011/01/06(木) 23:56:01437430
2011/01/06(木) 23:56:17 >>435
自分の質問を見直してみると全く質問になっていなかったにも関わらずエスパー
してくださってありがとうございます。
ARGCについて理解できました。
BEGIN{
ARGV[1]="hoge.txt"
ARGC=2
}
ARGV[1]=="hoge.txt"{
print "BODY\t"$0
}
こんな感じで意図した通りに出力されました。
おかげさまで今までawkの補助としてshを使ってましたが、awkだけで書ける事が
多くなりました。
引数にワイルドカードを指定して、ARGIND で特定パターンのファイル名の
物のみ処理をするとかできそうですね。
自分の質問を見直してみると全く質問になっていなかったにも関わらずエスパー
してくださってありがとうございます。
ARGCについて理解できました。
BEGIN{
ARGV[1]="hoge.txt"
ARGC=2
}
ARGV[1]=="hoge.txt"{
print "BODY\t"$0
}
こんな感じで意図した通りに出力されました。
おかげさまで今までawkの補助としてshを使ってましたが、awkだけで書ける事が
多くなりました。
引数にワイルドカードを指定して、ARGIND で特定パターンのファイル名の
物のみ処理をするとかできそうですね。
438デフォルトの名無しさん
2011/01/09(日) 22:38:39 質問です。
My Documents\2011\01\09(日)
というようにフォルダを切っていて、今日にcdするために、
today.bat
gawk -f today.awk > tmp.bat
tmp.bat
del tmp.bat
today.awk
BEGIN{year = strftime("%Y",systime()+9*60*60);
month = strftime("%m",systime()+9*60*60);
date = strftime("%d",systime()+9*60*60);
day = strftime("%a",systime()+9*60*60);
gsub(/(Sun)/, "(日)", day);
gsub(/(Mon)/, "(月)", day);
gsub(/(Tue)/, "(火)", day);
gsub(/(Wed)/, "(水)", day);
gsub(/(Thu)/, "(木)", day);
gsub(/(Fri)/, "(金)", day);
gsub(/(Sat)/, "(土)", day);
print "cd \"My Documents\" year "\" month "\" date day
}
というように処理しています。
これって、ひょっとして、gawkの内部からprintせずに実行することは可能でしょうか?
My Documents\2011\01\09(日)
というようにフォルダを切っていて、今日にcdするために、
today.bat
gawk -f today.awk > tmp.bat
tmp.bat
del tmp.bat
today.awk
BEGIN{year = strftime("%Y",systime()+9*60*60);
month = strftime("%m",systime()+9*60*60);
date = strftime("%d",systime()+9*60*60);
day = strftime("%a",systime()+9*60*60);
gsub(/(Sun)/, "(日)", day);
gsub(/(Mon)/, "(月)", day);
gsub(/(Tue)/, "(火)", day);
gsub(/(Wed)/, "(水)", day);
gsub(/(Thu)/, "(木)", day);
gsub(/(Fri)/, "(金)", day);
gsub(/(Sat)/, "(土)", day);
print "cd \"My Documents\" year "\" month "\" date day
}
というように処理しています。
これって、ひょっとして、gawkの内部からprintせずに実行することは可能でしょうか?
439デフォルトの名無しさん
2011/01/09(日) 22:54:33 system関数で出来るんでは?winは分からないけど
440デフォルトの名無しさん
2011/01/09(日) 23:06:13 system("cd \"My Documents\" year "\" month "\" date day);
とかではだめでした。
とかではだめでした。
441デフォルトの名無しさん
2011/01/10(月) 03:54:21 >440
なんか " と \ の数がおかしくね?
My Documents\2011\01\09(日)
↓
"My Documents\\2011\\01\\09(日)"
↓
"My Documents\\" year "\\" month "\\" date day
だよな?
なんか " と \ の数がおかしくね?
My Documents\2011\01\09(日)
↓
"My Documents\\2011\\01\\09(日)"
↓
"My Documents\\" year "\\" month "\\" date day
だよな?
442デフォルトの名無しさん
2011/01/10(月) 11:42:11 アドバイスありがとうございます。
はい。
\はおっしゃるとおりですが、依然としてだめです。
today.batをコマンドプロンプトから実行すると、
printしてそのtmp.batを実行する438のパターンだと、
ちゃんとcdできて、今日のフォルダに移動するのですが、
system("cd \\"My Documents\\" year "\\" month "\\" date day);
だと、移動せずに終了してしまいます。
なんでだろーな。
はい。
\はおっしゃるとおりですが、依然としてだめです。
today.batをコマンドプロンプトから実行すると、
printしてそのtmp.batを実行する438のパターンだと、
ちゃんとcdできて、今日のフォルダに移動するのですが、
system("cd \\"My Documents\\" year "\\" month "\\" date day);
だと、移動せずに終了してしまいます。
なんでだろーな。
443デフォルトの名無しさん
2011/01/10(月) 12:32:20 cygwinを入れてやってみた
systemはshで動くっぽいので
rm /cygdrive/c/Documents\ and\ Settings/test.txt
みたいに書くとちゃんと消えるみたい
systemはshで動くっぽいので
rm /cygdrive/c/Documents\ and\ Settings/test.txt
みたいに書くとちゃんと消えるみたい
444デフォルトの名無しさん
2011/01/10(月) 13:24:47 >>438,442
438で書いてるgawkでやりたいことってのはバッチファイルでやってるのと同じこと?
だったら無理。
system() でcdしてもsystem()から返ってきたところで元に戻る。
438で書いてるgawkでやりたいことってのはバッチファイルでやってるのと同じこと?
だったら無理。
system() でcdしてもsystem()から返ってきたところで元に戻る。
445デフォルトの名無しさん
2011/01/11(火) 01:15:49 どうせ糞nixツールだから日本語や空白はダメなんだろ
446デフォルトの名無しさん
2011/01/11(火) 09:05:01447デフォルトの名無しさん
2011/01/19(水) 02:44:33 とりあえずAWKで書いた巨大なスクリプトを、鯖で回し続けるのはやめてください。
非効率極まりない
非効率極まりない
448デフォルトの名無しさん
2011/01/19(水) 15:27:12 それはその人に言って下さい
449デフォルトの名無しさん
2011/01/19(水) 21:03:10 その場で使えるのがawkだけだったんです
450デフォルトの名無しさん
2011/01/19(水) 23:56:54 文字から文字コード取り出せないのが残念
逆はsprintf("%c", 0x41)とか出来るのにな
逆はsprintf("%c", 0x41)とか出来るのにな
452デフォルトの名無しさん
2011/01/20(木) 09:05:02453デフォルトの名無しさん
2011/01/20(木) 23:49:13 #!/bin/gawk --re-interval -f
↑のファイルを実行するとオプションが不正と言われて実行できないのですが
コマンドラインのオプションで指定する以外にやり方はありますか?
↑のファイルを実行するとオプションが不正と言われて実行できないのですが
コマンドラインのオプションで指定する以外にやり方はありますか?
454デフォルトの名無しさん
2011/01/21(金) 05:12:58455デフォルトの名無しさん
2011/01/21(金) 08:45:02 #!でインタプリタに渡す引数の扱いは実装依存だからな。
linuxだと空白を含んだ全ての文字列が一つの引数として
渡されるので、複数のオプションは渡せない。不便だけど
そういうものなのであきらめてください。素直にシェルを
間に入れるのがいいと思うよ。
linuxだと空白を含んだ全ての文字列が一つの引数として
渡されるので、複数のオプションは渡せない。不便だけど
そういうものなのであきらめてください。素直にシェルを
間に入れるのがいいと思うよ。
456デフォルトの名無しさん
2011/01/21(金) 12:45:00 gawk '$3!="*"' in.txt>out.txt
という処理で、20GBぐらいのin.txtを数百MBぐらいにスリムアップしてます。
問題は、その処理を10本ほど並行に作業させているんですが
topで見てみるとほとんどのgawkプロセスがsleepかstackedになっていて
あんまりもりもり働いてくれません。IOが律速なのでしょうか?
CPUもメモリも最大限積んでます。
という処理で、20GBぐらいのin.txtを数百MBぐらいにスリムアップしてます。
問題は、その処理を10本ほど並行に作業させているんですが
topで見てみるとほとんどのgawkプロセスがsleepかstackedになっていて
あんまりもりもり働いてくれません。IOが律速なのでしょうか?
CPUもメモリも最大限積んでます。
457デフォルトの名無しさん
2011/01/21(金) 12:50:02 stacked -> stuckでした。すいません。
458デフォルトの名無しさん
2011/01/21(金) 13:26:09 '$3!="*"'
これって書き間違い?
これって書き間違い?
459デフォルトの名無しさん
2011/01/21(金) 13:47:33 削られるデータの例
745_17_70_F3 4 * 0 0 * * 0 0 GGAGTGCCCCACACTTGGAGGCGAGCGCCCGGCAGACTTCCCCGCCGCC &+))8'1%+%-%%'((-)%%)8+,&+*7'+/%5''%%%%%-')-/'%/( XM:i:0
残るデータの例
745_377_43_F3 0 chr1 181855450 255 48M * 0 0 CATGTATGTGGCCAAAGGAACAACGCTATGTTTCCTAAAAGGCCTAGA G`[[`a`ab`^\ZYZ[SIR\Z[L7I_L>HU^bOKSDES[PO9-HNG7= XA:i:2 MD:Z:26C21 NM:i:1 CM:i:3
こういうのが80万行ぐらいあるようです。
745_17_70_F3 4 * 0 0 * * 0 0 GGAGTGCCCCACACTTGGAGGCGAGCGCCCGGCAGACTTCCCCGCCGCC &+))8'1%+%-%%'((-)%%)8+,&+*7'+/%5''%%%%%-')-/'%/( XM:i:0
残るデータの例
745_377_43_F3 0 chr1 181855450 255 48M * 0 0 CATGTATGTGGCCAAAGGAACAACGCTATGTTTCCTAAAAGGCCTAGA G`[[`a`ab`^\ZYZ[SIR\Z[L7I_L>HU^bOKSDES[PO9-HNG7= XA:i:2 MD:Z:26C21 NM:i:1 CM:i:3
こういうのが80万行ぐらいあるようです。
460デフォルトの名無しさん
2011/01/21(金) 13:52:48 スクリプトの中身は実際は違うわけね
たぶん、データの格納場所がプログラム実行マシンと別のマシンの
ディスクなんじゃないかな。
ネットワークがビジー状態だと思う。
たぶん、データの格納場所がプログラム実行マシンと別のマシンの
ディスクなんじゃないかな。
ネットワークがビジー状態だと思う。
461453
2011/01/21(金) 16:09:37 >454-455
ありがとうございました。
挙動を変える組み込み変数も無いようですね。
ありがとうございました。
挙動を変える組み込み変数も無いようですね。
462デフォルトの名無しさん
2011/01/21(金) 16:47:10 とりあえず df コマンドで作業ディレクトリと /var/tmp の空き領域が
確保されていることと、出力ファイルのサイズやタイムスタンプが徐々に
更新されていることを確認するくらいしかないんじゃないかな。
ローカルディスクでやればもっと早いと思うけど。
確保されていることと、出力ファイルのサイズやタイムスタンプが徐々に
更新されていることを確認するくらいしかないんじゃないかな。
ローカルディスクでやればもっと早いと思うけど。
463デフォルトの名無しさん
2011/01/21(金) 17:42:04 >>460
なるほど。
xgridをつかって、2台のマシンで10本ずつほど並行してgawkを走らせておりました。
NFSをつかって5GBほどの(先ほどは20GBと書きましたが間違いです)in.txtの
のデータを読み込んで、処理後のデータをout.txtに書き出しているので、
ネットワークビジーになってしまうというわけですね。
ネットワークの問題とは。。。
一応、エラーでこけることなく、しゅくしゅくと処理は進むので気にしないことにします。
なるほど。
xgridをつかって、2台のマシンで10本ずつほど並行してgawkを走らせておりました。
NFSをつかって5GBほどの(先ほどは20GBと書きましたが間違いです)in.txtの
のデータを読み込んで、処理後のデータをout.txtに書き出しているので、
ネットワークビジーになってしまうというわけですね。
ネットワークの問題とは。。。
一応、エラーでこけることなく、しゅくしゅくと処理は進むので気にしないことにします。
464デフォルトの名無しさん
2011/01/21(金) 17:44:39 2台のマシンで20本でした(10+11)。。。
一プロセスあたり5GBのファイルを読み込むので、ネットワークが悲鳴を上げていると。
一プロセスあたり5GBのファイルを読み込むので、ネットワークが悲鳴を上げていると。
465デフォルトの名無しさん
2011/01/24(月) 21:31:50 今年、gawkを大学で習って色々弄ってるんだけど、perlとかより自由度が低いと言われた。そんなに差があるの?
466デフォルトの名無しさん
2011/01/24(月) 21:46:54467デフォルトの名無しさん
2011/01/24(月) 22:19:29 >>466
なるほど。まぁ、そんなに複雑なことをこなすスキルを持ち合わせてないからもう暫くawkで遊んでみるか。
なるほど。まぁ、そんなに複雑なことをこなすスキルを持ち合わせてないからもう暫くawkで遊んでみるか。
468デフォルトの名無しさん
2011/01/24(月) 23:30:11 自由度というよりは機能が少ないじゃないのか?
469デフォルトの名無しさん
2011/01/25(火) 05:02:06 このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
470デフォルトの名無しさん
2011/01/25(火) 11:23:33 >>467
perlユーザはすべてをperlだけでやろうとする。C/C++/Javaも使うユーザはawkの方を好む。
C/C++/Javaに手を延ばすつもりならむしろawkのほうがいいよ。perlだと自己完結してしまうから。
perlユーザはすべてをperlだけでやろうとする。C/C++/Javaも使うユーザはawkの方を好む。
C/C++/Javaに手を延ばすつもりならむしろawkのほうがいいよ。perlだと自己完結してしまうから。
471デフォルトの名無しさん
2011/01/25(火) 16:02:25 perlよりawkの方が速い事ってないじゃん。
今のawkの使い道はワンライナーをコマンドラインのパイプに混ぜる程度でしよ。
俺は、256倍本の長篇スクリプトをいくつか書いたけど、
当時はまだperlなんて使われてなかった。時代が違う。
今のawkの使い道はワンライナーをコマンドラインのパイプに混ぜる程度でしよ。
俺は、256倍本の長篇スクリプトをいくつか書いたけど、
当時はまだperlなんて使われてなかった。時代が違う。
472デフォルトの名無しさん
2011/01/25(火) 18:11:52 >>470
それは偏見だろ
autoconfなどの非常に基本的なツールでもPerlが使われているし
opensslのようにconfigureの(主にWindows用の)ポータビリティを上げるために
Perlを利用しているものもある
言語の適性をわかった上で適材適所で使えばいいんだよ
それは偏見だろ
autoconfなどの非常に基本的なツールでもPerlが使われているし
opensslのようにconfigureの(主にWindows用の)ポータビリティを上げるために
Perlを利用しているものもある
言語の適性をわかった上で適材適所で使えばいいんだよ
473デフォルトの名無しさん
2011/01/25(火) 21:08:21 日本国際賞
「米ベル研究所特別名誉技師のデニス・リッチー博士(69)と米グーグル社特別技師のケン・トンプソン博士(67)」
毎日jp - 毎日新聞のニュース・情報サイト
http://mainichi.jp/select/science/news/m20110126k0000m040012000c.html
「米ベル研究所特別名誉技師のデニス・リッチー博士(69)と米グーグル社特別技師のケン・トンプソン博士(67)」
毎日jp - 毎日新聞のニュース・情報サイト
http://mainichi.jp/select/science/news/m20110126k0000m040012000c.html
474デフォルトの名無しさん
2011/01/25(火) 21:29:34 >>471
>時代が違う。
時代と言う意味では、最近はデフォで Python が入っていたりするので
Perl を使うなら Python を選んじゃうな。
あんまり速さを競う仕事をしていないのと、ワンライナーを書く事が
多いので、awk も絶賛大活躍しているけど。
Perl がフルセットの言語なら awk は DSL みたいな物で、個人的には
awk の方が気安く書ける気がする。
>時代が違う。
時代と言う意味では、最近はデフォで Python が入っていたりするので
Perl を使うなら Python を選んじゃうな。
あんまり速さを競う仕事をしていないのと、ワンライナーを書く事が
多いので、awk も絶賛大活躍しているけど。
Perl がフルセットの言語なら awk は DSL みたいな物で、個人的には
awk の方が気安く書ける気がする。
475デフォルトの名無しさん
2011/01/25(火) 21:57:07 pythonは、コマンドラインで使いにくい。
-cで引数に一応コマンド渡せるけど、インデントの問題があるし、
perlの-pや-nみたいに標準入力のループ渡せないから。
-cで引数に一応コマンド渡せるけど、インデントの問題があるし、
perlの-pや-nみたいに標準入力のループ渡せないから。
476デフォルトの名無しさん
2011/01/25(火) 22:04:34 質問させて下さい
次のようなテキストがあるとします
aaaaa 10 20 10 5
aaabb 5 10 10 10
aaabb 5 5 5 5
aabaa 5 20 20 30
aabbb 10 10 5 5
bbaaa 10 10 10 10
bbbaa 5 10 10 5
bbbbb 10 5 5 30
ここで、aaaaaなどは個人の名前でかつ、3文字目までが姓、4〜5文字目が名前、また数字が出費だとして
各世帯の出費を出力したいと考えています。
aaa 20 35 25 20
aab 15 30 25 35
bba 10 10 10 10
bbb 15 15 15 35
となって欲しい訳です。
次のようなテキストがあるとします
aaaaa 10 20 10 5
aaabb 5 10 10 10
aaabb 5 5 5 5
aabaa 5 20 20 30
aabbb 10 10 5 5
bbaaa 10 10 10 10
bbbaa 5 10 10 5
bbbbb 10 5 5 30
ここで、aaaaaなどは個人の名前でかつ、3文字目までが姓、4〜5文字目が名前、また数字が出費だとして
各世帯の出費を出力したいと考えています。
aaa 20 35 25 20
aab 15 30 25 35
bba 10 10 10 10
bbb 15 15 15 35
となって欲しい訳です。
477デフォルトの名無しさん
2011/01/25(火) 22:18:47 で今考えている方法としては
substr($1,1,3) で姓を判定して
同じ姓なら、世帯を加算して行く
違う姓になったタイミングで1つ前の家の家計を print して
さらに各出費を初期化する
次の行に移って同じ世帯なら加算
という感じでスクリプトを組みたいんですが根本的なところでやり方が不味いでしょうか?
substr($1,1,3) で姓を判定して
同じ姓なら、世帯を加算して行く
違う姓になったタイミングで1つ前の家の家計を print して
さらに各出費を初期化する
次の行に移って同じ世帯なら加算
という感じでスクリプトを組みたいんですが根本的なところでやり方が不味いでしょうか?
478デフォルトの名無しさん
2011/01/25(火) 22:34:21 連想配列とかじゃ駄目なのか?
name[$1] += 1
name[$1] += 1
479デフォルトの名無しさん
2011/01/26(水) 01:13:08480デフォルトの名無しさん
2011/01/26(水) 20:18:53 >>474
OS(Linux)をデフォだけで使うことはまずありえなくて、
何かしら追加パッケージが必要になるはずだから、
Pythonがデフォで入っている事は実用面で評価対象にはならんと思う。
自分はDebianをメインに使うけど、インストール時にはベースシステムだけを選び、
それにsshdとrubyを追加するのがデフォなんで気にならない。
MacならPython/Rubyともデフォで入ってるから無問題だし、
Winならどちらもデフォじゃ入っていないから同じ。
また日常的なプログラミングに関して、Rubyの場合は以下のようにリスト構造を
シェルのパイプライン感覚で書けるのが嬉しい。
hoge_list.select { |x| ....}.sort { |x,y| .... }.map { |x| .... }.inject(n) {|x, i| .... }
ブロック(クロージャ)の無いPyton/Perlでは、こういったお気軽な書き方はできない。
だから日常的な活躍度で比較すると、自分の場合は、bash > awk > ruby になる。
基本はbashで、面倒な文字列処理があればawkをワンライナーで埋め込むのがパターン。
で、色々と機能を追加してきてbashプログラミングが重荷に感じられるようになり、
なおかつ汎用性のある(再利用の可能性がある)ツールであれば、一気にrubyに書き換える。
Pythonは本格的な開発であれば(Rubyよりも)優れた面が多々あると思うけど、
(>>475の指摘も含めて)お手軽さ/お気軽さに限ると(Rubyよりも)使いづらく感じる。
もちろんbashスクリプト(or Makefile)に埋め込むワンライナーであれば、awk がベスト。
OS(Linux)をデフォだけで使うことはまずありえなくて、
何かしら追加パッケージが必要になるはずだから、
Pythonがデフォで入っている事は実用面で評価対象にはならんと思う。
自分はDebianをメインに使うけど、インストール時にはベースシステムだけを選び、
それにsshdとrubyを追加するのがデフォなんで気にならない。
MacならPython/Rubyともデフォで入ってるから無問題だし、
Winならどちらもデフォじゃ入っていないから同じ。
また日常的なプログラミングに関して、Rubyの場合は以下のようにリスト構造を
シェルのパイプライン感覚で書けるのが嬉しい。
hoge_list.select { |x| ....}.sort { |x,y| .... }.map { |x| .... }.inject(n) {|x, i| .... }
ブロック(クロージャ)の無いPyton/Perlでは、こういったお気軽な書き方はできない。
だから日常的な活躍度で比較すると、自分の場合は、bash > awk > ruby になる。
基本はbashで、面倒な文字列処理があればawkをワンライナーで埋め込むのがパターン。
で、色々と機能を追加してきてbashプログラミングが重荷に感じられるようになり、
なおかつ汎用性のある(再利用の可能性がある)ツールであれば、一気にrubyに書き換える。
Pythonは本格的な開発であれば(Rubyよりも)優れた面が多々あると思うけど、
(>>475の指摘も含めて)お手軽さ/お気軽さに限ると(Rubyよりも)使いづらく感じる。
もちろんbashスクリプト(or Makefile)に埋め込むワンライナーであれば、awk がベスト。
481474じゃないけど
2011/01/26(水) 21:22:28 >>474と全く同じ意見だわ。
業務で使う事が多いRHELは余計な物はほとんど入れてない。
Python、Perlがデフォで入ってる感じ。
昔、UNIXを扱ってた頃はPerlならデフォで入ってたので、覚えようとしたけど結局身につかず。
sh、sed、awkでがんばってた。
業務で使う事が多いRHELは余計な物はほとんど入れてない。
Python、Perlがデフォで入ってる感じ。
昔、UNIXを扱ってた頃はPerlならデフォで入ってたので、覚えようとしたけど結局身につかず。
sh、sed、awkでがんばってた。
482デフォルトの名無しさん
2011/01/27(木) 00:10:46 >>480
デフォで入っているのが嬉しいのは、自分の環境だけでなく、他人の環境でも
使える事が保証されている事だよ。誰かに使ってもらう為のコードを書く時に、
パッケージの追加をお願いしなくて良いのはとても楽。特に、それが仕事で
使われている環境なら尚更。
サポートやトレーニングの仕事をした事がある人なら理解してもらえると思う。
デフォで入っているのが嬉しいのは、自分の環境だけでなく、他人の環境でも
使える事が保証されている事だよ。誰かに使ってもらう為のコードを書く時に、
パッケージの追加をお願いしなくて良いのはとても楽。特に、それが仕事で
使われている環境なら尚更。
サポートやトレーニングの仕事をした事がある人なら理解してもらえると思う。
483デフォルトの名無しさん
2011/01/27(木) 03:47:36 AWKは、NEC PC-9801のMS-DOSでもうごいた。AWK95.exeは、日本語に対応してない
484デフォルトの名無しさん
2011/01/27(木) 05:04:18 AWKの活躍する場面は、やっぱりテキスト処理だと思う。
そのちょっと複雑版として使うならPerlかな。
組み込みライブラリがテキスト処理に特化してるから。
Pythonは正規表現が言語に組み込まれてなかったりと
テキスト処理は若干やりにくい印象が強い。
その分、テキスト処理以外なら結構使うけどね。
そのちょっと複雑版として使うならPerlかな。
組み込みライブラリがテキスト処理に特化してるから。
Pythonは正規表現が言語に組み込まれてなかったりと
テキスト処理は若干やりにくい印象が強い。
その分、テキスト処理以外なら結構使うけどね。
485デフォルトの名無しさん
2011/01/27(木) 05:27:26 >>482
ああ、それ分かるわ。業務マシンとして使う商用UNIX(HP-UX/Solaris/AIX)だと
RubyどころかPython/Perlすらデフォじゃ入っていないし、そういった
フリーソフトの類いは原則として一切インストール禁止という環境もある。
(Web/MailといったInternet系サーバは別ね。あくまで業務マシン限定の話。)
だから商用UNIXユーザは、デフォで入っているツールに長けることになる。
やっぱり本物のUNIXプロを自称するのなら、python/rubyではなくsh/awkだし、
emacs/vimではなくvi、latexではなくroffを選ぶべきだよね。
ああ、それ分かるわ。業務マシンとして使う商用UNIX(HP-UX/Solaris/AIX)だと
RubyどころかPython/Perlすらデフォじゃ入っていないし、そういった
フリーソフトの類いは原則として一切インストール禁止という環境もある。
(Web/MailといったInternet系サーバは別ね。あくまで業務マシン限定の話。)
だから商用UNIXユーザは、デフォで入っているツールに長けることになる。
やっぱり本物のUNIXプロを自称するのなら、python/rubyではなくsh/awkだし、
emacs/vimではなくvi、latexではなくroffを選ぶべきだよね。
486デフォルトの名無しさん
2011/01/27(木) 06:50:40487デフォルトの名無しさん
2011/01/27(木) 07:07:12488デフォルトの名無しさん
2011/01/27(木) 07:10:47 リテラルだと何か良いことあるの?
489デフォルトの名無しさん
2011/01/27(木) 07:13:35 文字列かパターンか区別しやすい。
490デフォルトの名無しさん
2011/01/27(木) 07:16:17 あと、マッチングの表記が自然。
491デフォルトの名無しさん
2011/01/27(木) 09:03:47492デフォルトの名無しさん
2011/01/28(金) 15:46:44 >>491
それは簡易インストールで用途としてデスクトップあるいはインターネットサーバを
選択した場合の話じゃないのかな。基本システムにperl/pythonは含まれていないはず。
その簡易インストールも含めてデフォであるとするなら、Debianも同じ。
カテゴリでデスクトップを選べば「rubyもデフォ」でインストールされる。(RHLは知らん)
自分は余計な物は入れたくないから基本システムを選んでるけどね。
高可用性を要求される基幹業務システムの場合、自分はHP-UXを扱うケースが多いけど、
デフォでは基本システムを選び事前に設計したパッケージのみを追加するのが鉄則。
なぜならメーカのサポートが受けられない、あるいはあからさまに嫌な顔をされるから。
そんな環境だと、「真にデフォ」なsh/csh/sed/awkが大活躍していたりする。
それは簡易インストールで用途としてデスクトップあるいはインターネットサーバを
選択した場合の話じゃないのかな。基本システムにperl/pythonは含まれていないはず。
その簡易インストールも含めてデフォであるとするなら、Debianも同じ。
カテゴリでデスクトップを選べば「rubyもデフォ」でインストールされる。(RHLは知らん)
自分は余計な物は入れたくないから基本システムを選んでるけどね。
高可用性を要求される基幹業務システムの場合、自分はHP-UXを扱うケースが多いけど、
デフォでは基本システムを選び事前に設計したパッケージのみを追加するのが鉄則。
なぜならメーカのサポートが受けられない、あるいはあからさまに嫌な顔をされるから。
そんな環境だと、「真にデフォ」なsh/csh/sed/awkが大活躍していたりする。
493デフォルトの名無しさん
2011/01/28(金) 17:06:59 >>492
Solaris のデフォルトは "Entire Distribution" というパッケージのセットだよ。
インストーラーでデフォルトで選択されているのがこれだし、プリインストール
されているのもこれに近いもの。そこには Perl も Python も入ってる。
インストールする際の選択肢で "Core System" を選べば Perl や Python は
入らなかったと思うけど、これをデフォルトと呼ぶのはちょっと無理があると思うわ。
それと、簡易インストールとかカテゴリでデスクトップとか真にデフォと言った物は
Solaris には存在しない。Debian は知らん。
Solaris のデフォルトは "Entire Distribution" というパッケージのセットだよ。
インストーラーでデフォルトで選択されているのがこれだし、プリインストール
されているのもこれに近いもの。そこには Perl も Python も入ってる。
インストールする際の選択肢で "Core System" を選べば Perl や Python は
入らなかったと思うけど、これをデフォルトと呼ぶのはちょっと無理があると思うわ。
それと、簡易インストールとかカテゴリでデスクトップとか真にデフォと言った物は
Solaris には存在しない。Debian は知らん。
494デフォルトの名無しさん
2011/01/28(金) 20:11:40 Solaris2.6あたりのデフォでPerlは入ってた記憶がある。
15年くらい前のHP-UXだとPerlが入ってなかった記憶が。
15年くらい前のHP-UXだとPerlが入ってなかった記憶が。
495デフォルトの名無しさん
2011/01/29(土) 00:42:19 俺もHP-UXメインだけどPerl入ってないわ
496デフォルトの名無しさん
2011/01/29(土) 00:47:55 確かに、Solarisに慣れていてHP-UX使わされると使いにくいわー
497デフォルトの名無しさん
2011/01/29(土) 07:33:12 と言うわけで、UN*Xサーバ管理者の場合はawkを使えるようになっておけば間違いありませんね。
498デフォルトの名無しさん
2011/01/29(土) 10:56:30 環境を選ばないサーバ管理だったら、sh,grep,sed,tr,cut,paste,sort,uniqあたりで。
nawkとgawkの仕様差が結構あるので、awkは使いにくい。
nawkとgawkの仕様差が結構あるので、awkは使いにくい。
499デフォルトの名無しさん
2011/01/29(土) 13:15:51 こういう話題の時にSolarisとかHP-UXは出るのにAIXは出ないイメージ
500デフォルトの名無しさん
2011/01/29(土) 13:40:55 日本男児ならHI-UX、特にHI-UX/WE2だろ。常識やね
501デフォルトの名無しさん
2011/01/29(土) 14:15:09 うむ
502デフォルトの名無しさん
2011/01/29(土) 16:56:12 いやここはedスクリプトで
503デフォルトの名無しさん
2011/01/29(土) 18:47:15 Solarisは、/usr/bin/awk /usr/bin/nawk /usr/xpg4/bin/awk
3つ別々なのが入ってた気がするな。
で、一番まともなのが3番目なので、よそから持ってきたスクリプトは、先頭の#!を
書き換えないといけないという、カオスな状態じゃなかっただろうか。
3つ別々なのが入ってた気がするな。
で、一番まともなのが3番目なので、よそから持ってきたスクリプトは、先頭の#!を
書き換えないといけないという、カオスな状態じゃなかっただろうか。
504デフォルトの名無しさん
2011/01/29(土) 19:23:53 >>503
自分アカウントのパスは真っ先に /usr/xpg4/bin/を持ってきてたわ。
自分アカウントのパスは真っ先に /usr/xpg4/bin/を持ってきてたわ。
505デフォルトの名無しさん
2011/01/29(土) 19:25:17 スクリプトを組む時はだいたい nawk を使う
他人のスクリプトを丸パクリする機会が無いのでカオスは感じた事が無い
他人のスクリプトを丸パクリする機会が無いのでカオスは感じた事が無い
506デフォルトの名無しさん
2011/01/29(土) 19:32:53507デフォルトの名無しさん
2011/01/29(土) 19:39:08 ウチは RHEL と Solaris だけ考えれば良いから、awk で問題がある時は Perl か Python で済ますわ
508デフォルトの名無しさん
2011/01/30(日) 05:43:19 #!/usr/bin/env [gn]*awk
だろ常考
だろ常考
509デフォルトの名無しさん
2011/02/01(火) 10:39:45 shebang行に /usr/bin/env 書くのってあんま良いと思えないんだよなあ
複数の引数の扱いとか、環境変数をそこまで信用して良いものなのかとか
あと /usr/bin/ に env があることは本当に保証できるのかとか
/bin/sh を書いたほうが良いんじゃないかって思ってしまう
複数の引数の扱いとか、環境変数をそこまで信用して良いものなのかとか
あと /usr/bin/ に env があることは本当に保証できるのかとか
/bin/sh を書いたほうが良いんじゃないかって思ってしまう
510デフォルトの名無しさん
2011/02/01(火) 11:45:20 この話題も定番だな。前スレの558-564でもやってたぞ。とりあえず結論だけを引用しとくわ。
>調べてみたら#!にインタープリタの引数を2つ以上与えたときの
>挙動はOSによって違うようだった。
>
>FreeBSD4.2: 2つ以上あっても渡る(/usrbin/env gawk -f foo)
>Linux(2.6.8): 空白を含めて1つの引数として渡る(/usr/bin/env "gawk -f" foo)
>Soraris(5.8): 2つめ以降の引数は無視(/usr/bin/env gawk foo)
>
>結局/usr/bin/env使った書き方はgawkのインストール位置の差を
>吸収しようとしてるんだろうが、動作はOSによっててんでばらばら
>なのであまりお勧めできないということだろうか。
>調べてみたら#!にインタープリタの引数を2つ以上与えたときの
>挙動はOSによって違うようだった。
>
>FreeBSD4.2: 2つ以上あっても渡る(/usrbin/env gawk -f foo)
>Linux(2.6.8): 空白を含めて1つの引数として渡る(/usr/bin/env "gawk -f" foo)
>Soraris(5.8): 2つめ以降の引数は無視(/usr/bin/env gawk foo)
>
>結局/usr/bin/env使った書き方はgawkのインストール位置の差を
>吸収しようとしてるんだろうが、動作はOSによっててんでばらばら
>なのであまりお勧めできないということだろうか。
511デフォルトの名無しさん
2011/02/02(水) 00:12:39 ruby 界隈でも流行ってるな
意味も判らず「おまじない」と称して使ってるうちに
都市伝説化していくんだな
意味も判らず「おまじない」と称して使ってるうちに
都市伝説化していくんだな
512デフォルトの名無しさん
2011/02/03(木) 22:33:59 なぜ gawk には tr が無いのだ
tr("A-Z","A-Z")とかしたいぞ
tr("A-Z","A-Z")とかしたいぞ
513デフォルトの名無しさん
2011/02/04(金) 03:31:02 つ Python
514デフォルトの名無しさん
2011/02/04(金) 09:10:06 >>512
BEGIN {
hankaku="0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z "
zenkaku="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
}
{
for (i=0; i<length(hankaku); i+=2) {
gsub(substr(hankaku,i+1,1),substr(zenkaku,i+1,2))
}
}
BEGIN {
hankaku="0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z "
zenkaku="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
}
{
for (i=0; i<length(hankaku); i+=2) {
gsub(substr(hankaku,i+1,1),substr(zenkaku,i+1,2))
}
}
515デフォルトの名無しさん
2011/02/04(金) 09:20:39 それだとtr('ab', 'ba')がうまくいかないんだよなぁ。
516デフォルトの名無しさん
2011/02/04(金) 09:54:40 同じ事じゃん
517デフォルトの名無しさん
2011/02/04(金) 19:22:21 汎用的に1つ作っとけばいいじゃん
518デフォルトの名無しさん
2011/02/05(土) 20:23:34 >514みたいなベタ打ちじゃなくて
A-Zあ-ん
こういう表記で置換する方法ある?
A-Zあ-ん
こういう表記で置換する方法ある?
519デフォルトの名無しさん
2011/02/05(土) 20:37:26 >>518
tr 使えば?
tr 使えば?
520デフォルトの名無しさん
2011/02/06(日) 03:05:39 tr コマンドって環境によってマルチバイトの扱いが違わね?ウチの場合
Ubuntu10.04に入ってるtr(GNU coreutils)7.4はどうやら2文字扱いにしちゃうらしいが
MacOSX10.5に入ってるtr(バージョン判らんがman見るとBSD系ぽい)は1文字扱いにしてくれた
Ubuntu10.04に入ってるtr(GNU coreutils)7.4はどうやら2文字扱いにしちゃうらしいが
MacOSX10.5に入ってるtr(バージョン判らんがman見るとBSD系ぽい)は1文字扱いにしてくれた
521デフォルトの名無しさん
2011/02/06(日) 05:00:06 UNICODE = 文字数
mbcs = バイト数
mbcs = バイト数
522デフォルトの名無しさん
2011/02/07(月) 08:10:44 んーと、どゆこと?
gnome-terminalはユニコード設定のはずなんだが…
他にやらなきゃいけないことがあるってこと?
gnome-terminalはユニコード設定のはずなんだが…
他にやらなきゃいけないことがあるってこと?
523デフォルトの名無しさん
2011/02/09(水) 23:11:37 awk++使ってる人いる?
http://awk.info/?doc/dsl/awkplusplus.html
http://awk.info/?doc/dsl/awkplusplus.html
524デフォルトの名無しさん
2011/02/10(木) 14:20:51 最近、awkの存在を知りました。
いろんな言語を触っては挫折・・・触っては挫折・・・を繰り返していました。
awkは何となくマスター出来そうな気がします。
これから頑張ります!!
256倍の本を今は読んでおります。
いろんな言語を触っては挫折・・・触っては挫折・・・を繰り返していました。
awkは何となくマスター出来そうな気がします。
これから頑張ります!!
256倍の本を今は読んでおります。
525デフォルトの名無しさん
2011/02/16(水) 02:02:44 gawkでフィールドをソートして表示したいんだが
{split($0, a);asort(a);for(i=1;i<NF;i++){printf("%s%s", a[i], FS);}printf("%s\n", a[NF]);}
よりもスマートな方法ある?
$1〜$NFが入った特殊配列みたいなのがあったらうれしいのだが。
{split($0, a);asort(a);for(i=1;i<NF;i++){printf("%s%s", a[i], FS);}printf("%s\n", a[NF]);}
よりもスマートな方法ある?
$1〜$NFが入った特殊配列みたいなのがあったらうれしいのだが。
526デフォルトの名無しさん
2011/02/16(水) 07:22:58527デフォルトの名無しさん
2011/02/16(水) 12:11:40 >>526
なるほど、そうできるのか。ありがとう。
なるほど、そうできるのか。ありがとう。
528デフォルトの名無しさん
2011/02/17(木) 01:07:36 http://www.kt.rim.or.jp/~kbk/gawk-3.1/ に置いてあった
win32用gawkがいつの間にか公開停止になっていた。
wn32のgensubが使えて日本語が扱えて、
かつexeのみで稼動するのでインストール不要なのが便利で
公私にわたって愛用していたので、非常に悲しい・・・
win32用gawkがいつの間にか公開停止になっていた。
wn32のgensubが使えて日本語が扱えて、
かつexeのみで稼動するのでインストール不要なのが便利で
公私にわたって愛用していたので、非常に悲しい・・・
529デフォルトの名無しさん
2011/02/17(木) 02:14:57530デフォルトの名無しさん
2011/02/18(金) 11:30:36 それは少し古い.
gawk-mbcs-win32-20090920.zip が手元にあるので必要なら再配布するが?
gawk-mbcs-win32-20090920.zip が手元にあるので必要なら再配布するが?
531528
2011/02/19(土) 01:36:10532デフォルトの名無しさん
2011/02/19(土) 08:18:59 俺の手元に、gawk-mbcs-win32-20091124.zip があった。
欲しい人がいて、かつ再配布に問題無いという事がわかればどっかにうpするが。
しかしなんで配布やめちゃったんだろね。
どこからか拝借したコードとかのライセンス問題なのかな?
欲しい人がいて、かつ再配布に問題無いという事がわかればどっかにうpするが。
しかしなんで配布やめちゃったんだろね。
どこからか拝借したコードとかのライセンス問題なのかな?
533デフォルトの名無しさん
2011/02/19(土) 22:51:02.65 AWK++によるオブジェクト指向入門
http://ja.wikibooks.org/wiki/AWK%2B%2B%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%85%A5%E9%96%80
awk++は面白そうだけど、現実にはawkでOOをやる人はほとんどいないだろう。
そもそもawk使いはOOを理解できない高齢者がほとんどだし。
でも、gawkがデフォルトでOOに対応すればawkでオブジェクト指向する人も増えるかもね。
http://ja.wikibooks.org/wiki/AWK%2B%2B%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%85%A5%E9%96%80
awk++は面白そうだけど、現実にはawkでOOをやる人はほとんどいないだろう。
そもそもawk使いはOOを理解できない高齢者がほとんどだし。
でも、gawkがデフォルトでOOに対応すればawkでオブジェクト指向する人も増えるかもね。
534デフォルトの名無しさん
2011/02/19(土) 23:05:51.24 >>533
デフォでインストールされるawkでできる範囲のことしかやらないよ
デフォでインストールされるawkでできる範囲のことしかやらないよ
535デフォルトの名無しさん
2011/02/20(日) 00:59:51.51 同感。>デフォでできる範囲
長めのスクリプトを書いた事があったのでOOあると便利と思うけど
わざわざインストールするならperl、ruby、pythonがあるしなぁ
長めのスクリプトを書いた事があったのでOOあると便利と思うけど
わざわざインストールするならperl、ruby、pythonがあるしなぁ
536デフォルトの名無しさん
2011/02/22(火) 10:31:51.00 awkで書かれたawk++ってないの?
537デフォルトの名無しさん
2011/03/02(水) 23:14:41.35 gawkで平仮名・カタカナの部分を抜き出したいと思ってます。
例えば「awkについて語るスレ」だったら
"について" "るスレ" を変数に入れたいのですが、いい方法ありますでしょうか?
例えば「awkについて語るスレ」だったら
"について" "るスレ" を変数に入れたいのですが、いい方法ありますでしょうか?
538537
2011/03/02(水) 23:17:39.07 「について」と「るスレ」はそれぞれ別の変数に入れたいと思っています
539デフォルトの名無しさん
2011/03/02(水) 23:27:45.29 アルファベット以外の部分だったら、アルファベットをFSに指定してwhileで回せばいいけど、
漢字も抜くのは難しいな。
それに、事実上変数は無限に生成するって事か。
漢字も抜くのは難しいな。
それに、事実上変数は無限に生成するって事か。
540デフォルトの名無しさん
2011/03/02(水) 23:58:57.50 matchの第2引数に/[あ-んア-ン]+/を持ってくるとか?
541デフォルトの名無しさん
2011/03/03(木) 13:28:46.50 $0,$1...$NFを壊してもいいんだったら、私ならこうします。
gsubの検索文字鉄には正規表現を使用することができるから、
ひらがなとカタカナ以外の文字をスペースに置き換える。
gsub(/[^ーぁ-んァ-ン]/," ")
ひらがなとカタカナ以外の文字は半角スペース2つに置き換わる。
あとはNFを見て表示したいように処理する。
注意すべきは、Windows版の新しいバージョンのものでは、
正規表現として、ひらがなを ぁ-ん で、カタカナを ァ-ン で
指定できないものがあります。
たしかマルチバイト拡張で壊された。
gsubの検索文字鉄には正規表現を使用することができるから、
ひらがなとカタカナ以外の文字をスペースに置き換える。
gsub(/[^ーぁ-んァ-ン]/," ")
ひらがなとカタカナ以外の文字は半角スペース2つに置き換わる。
あとはNFを見て表示したいように処理する。
注意すべきは、Windows版の新しいバージョンのものでは、
正規表現として、ひらがなを ぁ-ん で、カタカナを ァ-ン で
指定できないものがあります。
たしかマルチバイト拡張で壊された。
542537
2011/03/03(木) 14:28:35.14 >541
まだ試してませんが、欲する文字以外を消してゴニョゴニョすればいけそうです。
>539-540さんもありがとうございました。
まだ試してませんが、欲する文字以外を消してゴニョゴニョすればいけそうです。
>539-540さんもありがとうございました。
543デフォルトの名無しさん
2011/03/03(木) 19:41:21.36 BEGIN {
str = "デンコ漢字ばんざい元気abcdeだから"
c = split(str, a, "[^ーァ-ンぁ-ん]")
for (i = c; i>=1; i--) {
if ( a[i] !~ /^$/ ) { print a[i] }
}
}
str = "デンコ漢字ばんざい元気abcdeだから"
c = split(str, a, "[^ーァ-ンぁ-ん]")
for (i = c; i>=1; i--) {
if ( a[i] !~ /^$/ ) { print a[i] }
}
}
544デフォルトの名無しさん
2011/03/03(木) 19:44:47.65 ボケかました
4行目は普通に
for ( i = 1; i <=c; i++) {
でOK。
4行目は普通に
for ( i = 1; i <=c; i++) {
でOK。
545デフォルトの名無しさん
2011/03/03(木) 22:55:52.84 cを残さなくとも
for (i in a){if (a[i]) print a[i]}
で間に合うような。
for (i in a){if (a[i]) print a[i]}
で間に合うような。
546デフォルトの名無しさん
2011/03/04(金) 01:04:03.52 for-inだと順序が保障されないんじゃなかったっけ?
547デフォルトの名無しさん
2011/03/04(金) 08:34:52.75 for ( i = 1; i in a ; i++) って書き方もできるよ
548デフォルトの名無しさん
2011/03/07(月) 14:14:11.11 a1 a1 a1 a2 a2 a3
b1 b1 b1 b1
c1
d1 d2 d2
....
のように、フィールド数がバラバラで、フィールドが一致する場合もあれば
一致しないデータがあるのですが、重複を
a1 a2 a3
b1
c1
d1 d2
のようにまとめあげるにはどうしたらよいでしょうか?
さすがにググってコピペという訳にもいかず。。。
b1 b1 b1 b1
c1
d1 d2 d2
....
のように、フィールド数がバラバラで、フィールドが一致する場合もあれば
一致しないデータがあるのですが、重複を
a1 a2 a3
b1
c1
d1 d2
のようにまとめあげるにはどうしたらよいでしょうか?
さすがにググってコピペという訳にもいかず。。。
549デフォルトの名無しさん
2011/03/07(月) 14:31:25.16550デフォルトの名無しさん
2011/03/07(月) 14:53:42.21 ありがとうございます。
それぞれ、4つ重複データのあったものは3つに、2つのものは1つにと減ったのですが
それ以上減ってません。同じコマンドを繰り返しかけてみたのですが、変化はなかったです。
a1 a1 a1 a1
b1 b1 b1
...の部分が
a1 a1 a1
b1 b1
にはなったという意味です。
もう少しおつきあいいただけないでしょうか。。。
それぞれ、4つ重複データのあったものは3つに、2つのものは1つにと減ったのですが
それ以上減ってません。同じコマンドを繰り返しかけてみたのですが、変化はなかったです。
a1 a1 a1 a1
b1 b1 b1
...の部分が
a1 a1 a1
b1 b1
にはなったという意味です。
もう少しおつきあいいただけないでしょうか。。。
551デフォルトの名無しさん
2011/03/07(月) 15:06:41.15 手元では一つになるけどなぁ。原理はわかるだろうからあとはがんばれ。
行ごとにフィールドの添字についてループするのと連想配列で出現チェックがキモ。
% cat hoge.txt
a1 a1 a1 a2 a2 a3
b1 b1 b1 b1
c1
d1 d2 d2
% awk '{j=0;delete a;for(i=1;i<=NF;i++){if(!a[$i]++){$(++j)=$i}}NF=j;print}' hoge.txt
a1 a2 a3
b1
c1
d1 d2
行ごとにフィールドの添字についてループするのと連想配列で出現チェックがキモ。
% cat hoge.txt
a1 a1 a1 a2 a2 a3
b1 b1 b1 b1
c1
d1 d2 d2
% awk '{j=0;delete a;for(i=1;i<=NF;i++){if(!a[$i]++){$(++j)=$i}}NF=j;print}' hoge.txt
a1 a2 a3
b1
c1
d1 d2
552デフォルトの名無しさん
2011/03/07(月) 15:14:33.26 0610005C13Rik 0610005C13Rik 0610005C13Rik
0610007C21Rik 0610007C21Rik 0610007C21Rik 0610007C21Rik 0610007C21Rik
こういう感じの文字列なんですが
a1とかb1で例えても大丈夫だったですか?
0610007C21Rik 0610007C21Rik 0610007C21Rik 0610007C21Rik 0610007C21Rik
こういう感じの文字列なんですが
a1とかb1で例えても大丈夫だったですか?
553デフォルトの名無しさん
2011/03/07(月) 15:38:11.62 空白で区切られた文字列ならなんでもいいが、そのレベルの質問が
出るようじゃもうすこし基礎を勉強しないとだめかもなぁ。
出るようじゃもうすこし基礎を勉強しないとだめかもなぁ。
554デフォルトの名無しさん
2011/03/07(月) 15:50:13.69 シングルクオーテーション使用のサンプルで問題ないと言う事は〜
UNIX環境なのかな〜
UNIX環境なのかな〜
555デフォルトの名無しさん
2011/03/07(月) 15:58:11.87556デフォルトの名無しさん
2011/03/07(月) 16:04:33.75 一行野郎を分解してスクリプトに組み直して弄れば動作確認出来ると思う
557デフォルトの名無しさん
2011/03/07(月) 16:21:10.50558デフォルトの名無しさん
2011/03/07(月) 17:18:15.93 まだやってるのか〜
ファイルの ^M が問題みたいだから
CRLFのファイル形式に変換して上の一行野郎で問題ないみたいだったよ。
ファイルの ^M が問題みたいだから
CRLFのファイル形式に変換して上の一行野郎で問題ないみたいだったよ。
559デフォルトの名無しさん
2011/04/19(火) 03:07:46.46 #複数行の入力中、先の行の11カラム目にOUTが含まれているかつ次の行の11カラム目にINが含まれている2行が揃った時、2行を出力
$11~/OUT/{ prev=$0; }
$11~/IN/{
if(prev!=""){ print prev; print; }
prev="";
}
$11~/OUT/{ prev=$0; }
$11~/IN/{
if(prev!=""){ print prev; print; }
prev="";
}
560デフォルトの名無しさん
2011/04/19(火) 15:55:50.78 # 7.awk
NR >= 2{
if($0 ~ /^>'=+/){
if($0 ~ /~$/){
print "A";
}else{
print "NAA";
}
}else if($0 ~ /^>\^(Q=)+/){
if($0 ~ /~~$/){
print "B";
}else{
print "NAB";
}
}else{
print "NAC";
}
}
7.txt
3
>'======#======~
>^Q=Q=Q=Q=Q=Q=Q=Q=~~
>'===#====~
NAA
NBB
NAA となる。何で?
A
B
A となってほしいのに・・・gawk 3.1.7です・・
NR >= 2{
if($0 ~ /^>'=+/){
if($0 ~ /~$/){
print "A";
}else{
print "NAA";
}
}else if($0 ~ /^>\^(Q=)+/){
if($0 ~ /~~$/){
print "B";
}else{
print "NAB";
}
}else{
print "NAC";
}
}
7.txt
3
>'======#======~
>^Q=Q=Q=Q=Q=Q=Q=Q=~~
>'===#====~
NAA
NBB
NAA となる。何で?
A
B
A となってほしいのに・・・gawk 3.1.7です・・
561デフォルトの名無しさん
2011/04/19(火) 16:30:51.01 俺の手元のgawk 3.1.7では期待通りの結果になるなあ。
行末がらみだと改行コードが違ってたり見えない空白が
入ってたりというのがよくあるので確認してみ。
行末がらみだと改行コードが違ってたり見えない空白が
入ってたりというのがよくあるので確認してみ。
562デフォルトの名無しさん
2011/04/19(火) 16:32:43.45563デフォルトの名無しさん
2011/04/19(火) 16:45:20.75564デフォルトの名無しさん
2011/04/19(火) 17:00:39.34565559
2011/04/20(水) 01:08:11.06 http://okwave.jp/qa/q6672025.html
とかの入力をイメージしてたもので...
$11~/OUT/{ prev=$0; }
$11~/IN/{
if(prev!=""){ print prev; print; }
}
$11!~/OUT/{ prev=""; }
とかの入力をイメージしてたもので...
$11~/OUT/{ prev=$0; }
$11~/IN/{
if(prev!=""){ print prev; print; }
}
$11!~/OUT/{ prev=""; }
566デフォルトの名無しさん
2011/05/01(日) 16:22:39.39 http://okwave.jp/qa/q6660984.html
#2列目の項目がdisk1〜4まで不足部分が埋まるようにし、不足していた部分の1列目には前の時間、3列目には0で埋めたい
BEGIN{ dt=prevDt="00:00:00"; }
NF>=3{ dt=$1; tgt=$2; n=$3; }
NF==2{ tgt=$1; n=$2; }
{ gapDisp(prevTgt,tgt); disp(dt,tgt,n); prevDt=dt; prevTgt=tgt; }
END{ gapDisp(tgt,"disk1"); }
function disp(dt,tgt,n){ print dt, tgt, n; }
function gapDisp(disk,endDisk, cnt)
{
for(cnt=add(getNo(disk)); cnt!=getNo(endDisk); cnt=add(cnt)) disp(prevDt, sprintf("disk%d", cnt), 0);
}
function add(cnt){ return ((++cnt>4)?(1):(cnt)); }
function getNo(disk){ sub(/disk/,"",disk); return disk; }
#2列目の項目がdisk1〜4まで不足部分が埋まるようにし、不足していた部分の1列目には前の時間、3列目には0で埋めたい
BEGIN{ dt=prevDt="00:00:00"; }
NF>=3{ dt=$1; tgt=$2; n=$3; }
NF==2{ tgt=$1; n=$2; }
{ gapDisp(prevTgt,tgt); disp(dt,tgt,n); prevDt=dt; prevTgt=tgt; }
END{ gapDisp(tgt,"disk1"); }
function disp(dt,tgt,n){ print dt, tgt, n; }
function gapDisp(disk,endDisk, cnt)
{
for(cnt=add(getNo(disk)); cnt!=getNo(endDisk); cnt=add(cnt)) disp(prevDt, sprintf("disk%d", cnt), 0);
}
function add(cnt){ return ((++cnt>4)?(1):(cnt)); }
function getNo(disk){ sub(/disk/,"",disk); return disk; }
567デフォルトの名無しさん
2011/05/01(日) 19:40:09.87 BEGIN { reset() }
NF == 2 { $3 = $2; $2 = $1; $1 = last_t }
{ last_t = $1 }
{ if ($2 < last_disk) { p(); reset() } last_disk = $2 }
{ n[$2] = $3 }
{ for(i in n) { if (i >= $2) { t[i] = $1 } } }
END { p() }
function p() {
for (i = 1; i <= 4; i++) {
d = "disk" i
print t[d], d, n[d]
}
}
function reset() {
for (i = 1; i <= 4; i++) {
d = "disk" i
t[d] = t["disk4"]
n[d] = 0
}
}
NF == 2 { $3 = $2; $2 = $1; $1 = last_t }
{ last_t = $1 }
{ if ($2 < last_disk) { p(); reset() } last_disk = $2 }
{ n[$2] = $3 }
{ for(i in n) { if (i >= $2) { t[i] = $1 } } }
END { p() }
function p() {
for (i = 1; i <= 4; i++) {
d = "disk" i
print t[d], d, n[d]
}
}
function reset() {
for (i = 1; i <= 4; i++) {
d = "disk" i
t[d] = t["disk4"]
n[d] = 0
}
}
568デフォルトの名無しさん
2011/05/03(火) 14:58:05.53 間違ってるよ
しかも長くて美しくないよ
しかも長くて美しくないよ
569デフォルトの名無しさん
2011/05/03(火) 15:13:19.32 http://okwave.jp/qa/q6711117.html
...こんな感じかねぇ? awk -f sum.awk データ | sort
----- sum.awk -----
$1!~/商店名/{ tbl[$1 "," $2]+=$3; }
END{
for(key in tbl){
split(key, item, /,/);
print item[1], item[2], tbl[key];
}
}
-----
...こんな感じかねぇ? awk -f sum.awk データ | sort
----- sum.awk -----
$1!~/商店名/{ tbl[$1 "," $2]+=$3; }
END{
for(key in tbl){
split(key, item, /,/);
print item[1], item[2], tbl[key];
}
}
-----
570デフォルトの名無しさん
2011/05/03(火) 15:33:28.80 >>566
NF==3 {
disp();
for(i=1;i<=4;i++) {
disk_time[i]=$1
disk_val[i]=0
}
disk_val[substr($2, 5, 1)]=$3
}
NF==2 {
disk_val[substr($1, 5, 1)]=$2
}
END{
disp()
}
function disp() {
for(i=1;i<=4;i++) {
if(i in disk_time) printf("%s disk%d %s\n", disk_time[i], i, disk_val[i])
}
}
NF==3 {
disp();
for(i=1;i<=4;i++) {
disk_time[i]=$1
disk_val[i]=0
}
disk_val[substr($2, 5, 1)]=$3
}
NF==2 {
disk_val[substr($1, 5, 1)]=$2
}
END{
disp()
}
function disp() {
for(i=1;i<=4;i++) {
if(i in disk_time) printf("%s disk%d %s\n", disk_time[i], i, disk_val[i])
}
}
571デフォルトの名無しさん
2011/05/03(火) 16:12:56.67 BEGIN {
# 先頭がいきなり "disk2 15" のみで始まったりしなければ
# この初期化は不要。
a = "00:00:00";
}
NF == 3 {
if (NR > 1) put();
a = $1;
b[$2] = $3;
}
NF == 2 {
b[$1] = $2;
}
END {
put();
}
function put( i) {
for (i = 1; i <= 4; i++) {
print a, "disk" i, b["disk" i] + 0;
b["disk" i] = 0;
}
}
# 先頭がいきなり "disk2 15" のみで始まったりしなければ
# この初期化は不要。
a = "00:00:00";
}
NF == 3 {
if (NR > 1) put();
a = $1;
b[$2] = $3;
}
NF == 2 {
b[$1] = $2;
}
END {
put();
}
function put( i) {
for (i = 1; i <= 4; i++) {
print a, "disk" i, b["disk" i] + 0;
b["disk" i] = 0;
}
}
572デフォルトの名無しさん
2011/05/03(火) 16:20:05.55 >>569 awkの配列ってどれくらい確保可能なの?
先にsortしたらどうかな? sort データ | awk -f sum.awk
----- sum.awk -----
$1!~/商店名/{ if(store==$1 && item==$2) val+=$3; else{ disp(); store=$1; item=$2; val=$3; } }
END{ disp(); }
function disp(){ if(store!="" || item!="") print store, item, val; }
-----
先にsortしたらどうかな? sort データ | awk -f sum.awk
----- sum.awk -----
$1!~/商店名/{ if(store==$1 && item==$2) val+=$3; else{ disp(); store=$1; item=$2; val=$3; } }
END{ disp(); }
function disp(){ if(store!="" || item!="") print store, item, val; }
-----
574デフォルトの名無しさん
2011/05/06(金) 00:54:22.24 $ uname -sr
CYGWIN_NT-6.1 1.7.9(0.237/5/3)
$ awk --version
GNU Awk 3.1.8
この環境で、
awk 'BEGIN {for(i=j=1;i<50;++i) {print j; j*=10}}'
これ実行すると、jが23桁超えたあたりから、おかしくなるんだけど。
awkの整数って上限あるの?(ウチだけか?)
CYGWIN_NT-6.1 1.7.9(0.237/5/3)
$ awk --version
GNU Awk 3.1.8
この環境で、
awk 'BEGIN {for(i=j=1;i<50;++i) {print j; j*=10}}'
これ実行すると、jが23桁超えたあたりから、おかしくなるんだけど。
awkの整数って上限あるの?(ウチだけか?)
575デフォルトの名無しさん
2011/05/06(金) 01:09:59.27 long double辺りの精度しかないよ。
576デフォルトの名無しさん
2011/05/06(金) 09:18:39.10 >>574
おれのPCでは普通に 1 から 1e+048 まで表示されますが。。。
おれのPCでは普通に 1 から 1e+048 まで表示されますが。。。
578デフォルトの名無しさん
2011/05/06(金) 11:30:10.09579デフォルトの名無しさん
2011/05/06(金) 14:20:04.87580デフォルトの名無しさん
2011/05/06(金) 18:58:28.81 >>579
ありがとう。
あまり違いがないな。Win7は関係ないだろうし。
multi-byte extensionがその辺りも弄っているのか…
そういえば、1e+048みたいな指数で表示されるの?
出力のとき丸めるから、ちゃんと計算できてるように見えるのかな。
ありがとう。
あまり違いがないな。Win7は関係ないだろうし。
multi-byte extensionがその辺りも弄っているのか…
そういえば、1e+048みたいな指数で表示されるの?
出力のとき丸めるから、ちゃんと計算できてるように見えるのかな。
581デフォルトの名無しさん
2011/05/06(金) 23:07:48.20 awkでは数値はすべてdoubleで扱います。
ですからその精度である53bit分、大体15桁ちょっとを超えると正確な値を保持できません。
23桁あたりまで正しく表示できてるってのはよくわかりませんが、
3.0.6にしても出力時の書式指定が違うだけで内部的には同じように不正確な値に
なってしまってると思います。
ですからその精度である53bit分、大体15桁ちょっとを超えると正確な値を保持できません。
23桁あたりまで正しく表示できてるってのはよくわかりませんが、
3.0.6にしても出力時の書式指定が違うだけで内部的には同じように不正確な値に
なってしまってると思います。
582デフォルトの名無しさん
2011/05/07(土) 01:38:55.53 だから、実質long doubleの精度になっているんだってば。
583デフォルトの名無しさん
2011/05/07(土) 11:11:15.94 >>582
「実質」というのはどういう意味?
#define AWKNUM double
ってのがあるし、long double にしても仮数部は64bitだから23桁には足りないよ?
x87のレベルで拡張精度になってても、表示やらなんやらするところで倍精度に
丸められちゃうと思うんだけど。
「実質」というのはどういう意味?
#define AWKNUM double
ってのがあるし、long double にしても仮数部は64bitだから23桁には足りないよ?
x87のレベルで拡張精度になってても、表示やらなんやらするところで倍精度に
丸められちゃうと思うんだけど。
584デフォルトの名無しさん
2011/05/07(土) 13:09:06.68 http://codepad.org/4GaxJcGp
完全に一致。どう見ても double です。本当にありがとうございました
完全に一致。どう見ても double です。本当にありがとうございました
585デフォルトの名無しさん
2011/05/07(土) 21:19:09.46586デフォルトの名無しさん
2011/05/07(土) 23:01:38.63 >>583
あー、long doubleと言ったのが拙かったね。10の冪の場合は実質doubleを大きく越えた精度になっていると言いたかった。
10は2と5の積だから、10倍を繰り返すときに仮数部は5倍ずつにしかならない。
IEEEのdoubleの精度だと5の22乗で53ビットを使い果たすので、そこまでは誤差が生じない。
言い換えれば、10の場合は53ビット+22ビット、即ち75ビット分精度があるように見える。
まぁ、>584を10倍じゃなくて5倍にして、doubleをlong longにして%.fを%llxにしてビット数を数えてみればわかるでしょ。
あー、long doubleと言ったのが拙かったね。10の冪の場合は実質doubleを大きく越えた精度になっていると言いたかった。
10は2と5の積だから、10倍を繰り返すときに仮数部は5倍ずつにしかならない。
IEEEのdoubleの精度だと5の22乗で53ビットを使い果たすので、そこまでは誤差が生じない。
言い換えれば、10の場合は53ビット+22ビット、即ち75ビット分精度があるように見える。
まぁ、>584を10倍じゃなくて5倍にして、doubleをlong longにして%.fを%llxにしてビット数を数えてみればわかるでしょ。
587デフォルトの名無しさん
2011/05/09(月) 21:13:05.37 gawkのユーザガイドに、他の処理系では、標準エラーを使うため、
print "Serious error detected!" | "cat 1>&2"
という方法しかないとあります。
gawkは/dev/stderrを特別に扱うため、
print "Serious error detected!" > "/dev/stderr"
と書くのが適切とあります。
これには、どのような違いがあるのでしょうか?
/dev/stderrがあるOSなら、catのプロセスが生成される他は、違いはないのでしょうか?
環境や処理系を問わず動作させたいなら、上の書き方の方がよいのか、気になっています。
よろしくお願いします。
print "Serious error detected!" | "cat 1>&2"
という方法しかないとあります。
gawkは/dev/stderrを特別に扱うため、
print "Serious error detected!" > "/dev/stderr"
と書くのが適切とあります。
これには、どのような違いがあるのでしょうか?
/dev/stderrがあるOSなら、catのプロセスが生成される他は、違いはないのでしょうか?
環境や処理系を問わず動作させたいなら、上の書き方の方がよいのか、気になっています。
よろしくお願いします。
588デフォルトの名無しさん
2011/05/10(火) 00:17:11.81 他の処理系って、他のawkって事だよ。
/dev/stderrがあるOSって事ぢゃなくて、
gawkは特殊なファイル名として/dev/stderrとか使えるよ、って事だよ。
なので他のOSでも gawk だったらprintとかの出力先ファイル名として /dev/stderr 使えるって話だね。
/dev/stderrとかをサポートしていないgawk以外のawkでも動作させるなら パイプと"cat 1>&2"を使う方法しかない。が、Win系はcatだと...
/dev/stderrがあるOSって事ぢゃなくて、
gawkは特殊なファイル名として/dev/stderrとか使えるよ、って事だよ。
なので他のOSでも gawk だったらprintとかの出力先ファイル名として /dev/stderr 使えるって話だね。
/dev/stderrとかをサポートしていないgawk以外のawkでも動作させるなら パイプと"cat 1>&2"を使う方法しかない。が、Win系はcatだと...
589デフォルトの名無しさん
2011/05/10(火) 09:20:21.36 そこまでのことをするならPerl/Ruby/Python等のちゃんとした
スクリプト言語で書いた方がいいんじゃないかな。こういう
どうでもいいところで悩まなくて済むよ。
awkはawkで手軽に書ける範囲なら他の追随を許さないと思うが
その枠をはみ出ようとすると途端に大変になる。そこが楽しいと
いうのなら無理には止めないけどw
スクリプト言語で書いた方がいいんじゃないかな。こういう
どうでもいいところで悩まなくて済むよ。
awkはawkで手軽に書ける範囲なら他の追随を許さないと思うが
その枠をはみ出ようとすると途端に大変になる。そこが楽しいと
いうのなら無理には止めないけどw
590デフォルトの名無しさん
2011/05/10(火) 14:35:51.09 >>589
そう、それが楽しいんだ
そう、それが楽しいんだ
591デフォルトの名無しさん
2011/05/11(水) 00:36:20.77592デフォルトの名無しさん
2011/05/11(水) 10:19:43.16 Cで書き直したら数秒で実行完了の予感w
593デフォルトの名無しさん
2011/05/11(水) 12:14:45.46 つーてもawkとかその他のスクリプトでサクッと書けるような文字列処理を
C言語とかではあんまり書きたくならんと思うぞw
C言語とかではあんまり書きたくならんと思うぞw
594デフォルトの名無しさん
2011/05/24(火) 10:19:27.54 なりません
595デフォルトの名無しさん
2011/05/25(水) 20:17:22.02 あぁああぁぁぁ〜〜〜無理だったか、、無理なのかー!a[0][0] = 1 → syntax error
596デフォルトの名無しさん
2011/05/25(水) 21:58:46.38 >>595
gawkの場合インデックスをSUBSEP(=\034がデフォルト)を挟んでシリアライズしたインデックスで多次元配列を表現する
a[0,0] = 1;
ならOKのはず。このときのインデックスは"0\0340"だから、a["0\0340"] == 1。
gawkの場合インデックスをSUBSEP(=\034がデフォルト)を挟んでシリアライズしたインデックスで多次元配列を表現する
a[0,0] = 1;
ならOKのはず。このときのインデックスは"0\0340"だから、a["0\0340"] == 1。
597デフォルトの名無しさん
2011/05/26(木) 18:46:04.99 >>596
ありがとう。始めからそれを意識して書いてたらよかったんだけどね。
god["name"] = "Kaname Madoka"
god["msg"] = "Mahoushoujo ha watashi dakede juubun dayo."
homerun["name"] = "Akemi Homura"
homerun["msg"] = "Madoka ha watashi no yome."
こんな風に書いていたのを、
puella_magi["god"] = god
puella_magi["homerun"] = homerun
みたいにまとめようとしたら、あばばばば
awkの配列って処理系によっては添え字が整数の場合、処理が最適化されて早くなったりするのかな?
構造体の代わりみたいに使いたかったのだが。
ありがとう。始めからそれを意識して書いてたらよかったんだけどね。
god["name"] = "Kaname Madoka"
god["msg"] = "Mahoushoujo ha watashi dakede juubun dayo."
homerun["name"] = "Akemi Homura"
homerun["msg"] = "Madoka ha watashi no yome."
こんな風に書いていたのを、
puella_magi["god"] = god
puella_magi["homerun"] = homerun
みたいにまとめようとしたら、あばばばば
awkの配列って処理系によっては添え字が整数の場合、処理が最適化されて早くなったりするのかな?
構造体の代わりみたいに使いたかったのだが。
598デフォルトの名無しさん
2011/05/27(金) 00:57:28.69 name["god"] = "Kaname Madoka"
msg["god"] = "Mahoushoujo ha watashi dakede juubun dayo."
name["homerun"] = "Akemi Homura"
msg["homerun"] = "Madoka ha watashi no yome."
でよくね?
msg["god"] = "Mahoushoujo ha watashi dakede juubun dayo."
name["homerun"] = "Akemi Homura"
msg["homerun"] = "Madoka ha watashi no yome."
でよくね?
599デフォルトの名無しさん
2011/05/30(月) 21:25:51.88 awkって *どの実装でも* 一度も使ったことがない変数の内容って、スカラなら0か""になってるの?
変数が一度も代入されていないことを判定するために、(x==0 && x=="")って書いて何か問題ない?
変数が一度も代入されていないことを判定するために、(x==0 && x=="")って書いて何か問題ない?
600デフォルトの名無しさん
2011/05/30(月) 21:31:52.21601デフォルトの名無しさん
2011/05/30(月) 21:32:47.76 >>599
何度も代入した後、最後に 0 or "" を代入した変数と区別できない。
何度も代入した後、最後に 0 or "" を代入した変数と区別できない。
602デフォルトの名無しさん
2011/05/30(月) 23:19:06.92603デフォルトの名無しさん
2011/05/31(火) 00:05:27.97 あれ?試したらどっちを代入しても599の式は0に評価されたよ。区別できないケースってどういう場合?
604デフォルトの名無しさん
2011/05/31(火) 06:28:27.99 BEGIN {
# 初期化直後 (未使用) の変数は数値 (0) と文字列 ("") の両方の型を持つ。
print x == 0, x == ""; # 両方とも真
x = 0;
print x == 0, x == ""; # 前者のみ真。
x = "";
print x == 0, x == ""; # 後者のみ真。
# 他の未使用の変数を代入すると "再初期化" できる。
x = y;
print x == 0, x == ""; # 両方とも真。
}
# 初期化直後 (未使用) の変数は数値 (0) と文字列 ("") の両方の型を持つ。
print x == 0, x == ""; # 両方とも真
x = 0;
print x == 0, x == ""; # 前者のみ真。
x = "";
print x == 0, x == ""; # 後者のみ真。
# 他の未使用の変数を代入すると "再初期化" できる。
x = y;
print x == 0, x == ""; # 両方とも真。
}
605デフォルトの名無しさん
2011/05/31(火) 22:57:53.71 > 初期化直後 (未使用) の変数は数値 (0) と文字列 ("") の両方の型を持つ。
IEEE Std 1003.1 の awk の EXTENDED DESCRIPTION の
Variables and Special Variables に書いてあるね。 uninitialized value というらしい。
POSIXに準拠してるawkならこうなるみたいだけど、オリジナルは知らん。
再初期化するなら$(NF+1)使うほうがいいかもね。未使用の変数を用意しなくていい。
だけど、それが必要な場面が思い浮かばないが。
関係ないけど、abs関数ってないんだね。別に良いけど、πや、
0より大きい最小の浮動小数点数は定義しててほしいなあ。
IEEE Std 1003.1 の awk の EXTENDED DESCRIPTION の
Variables and Special Variables に書いてあるね。 uninitialized value というらしい。
POSIXに準拠してるawkならこうなるみたいだけど、オリジナルは知らん。
再初期化するなら$(NF+1)使うほうがいいかもね。未使用の変数を用意しなくていい。
だけど、それが必要な場面が思い浮かばないが。
関係ないけど、abs関数ってないんだね。別に良いけど、πや、
0より大きい最小の浮動小数点数は定義しててほしいなあ。
606デフォルトの名無しさん
2011/06/02(木) 10:09:14.37607デフォルトの名無しさん
2011/06/02(木) 22:47:31.10 πはatan2(0,-1)でいいとして
「0より大きい最小の浮動小数点数」ってどう定義していつ使うの?
「0より大きい最小の浮動小数点数」ってどう定義していつ使うの?
608デフォルトの名無しさん
2011/06/03(金) 13:48:37.95 「0より大きい最小の浮動小数点数」というのが何を希望しているかによる。
以下の3種類がある。
(1) 最小の正の非正規数
(2) 最小の正の正規数
(3) 1.0に足して丸めた結果が1.0より大きくなる最小の数
以下の3種類がある。
(1) 最小の正の非正規数
(2) 最小の正の正規数
(3) 1.0に足して丸めた結果が1.0より大きくなる最小の数
609デフォルトの名無しさん
2011/06/03(金) 23:58:11.26610デフォルトの名無しさん
2011/06/04(土) 09:41:48.63 DBL_EPSILONが>>608の(1)〜(3)のどれかわからない?
数値計算の基本なんだが。
数値計算の基本なんだが。
611デフォルトの名無しさん
2011/06/10(金) 21:49:33.34 変数名など、自前であっても規則を意識している方いますか?
awkだと、C風が一般的なのでしょうか?
一番最初がVBAだったので、長い名前と省略が混ざってしまって
自分でイライラしています。
みなさんの、通常の変数はこう、配列はこう、定数はこう、文字型はこう・・・
というものを参考にしたいです。
awkだと、C風が一般的なのでしょうか?
一番最初がVBAだったので、長い名前と省略が混ざってしまって
自分でイライラしています。
みなさんの、通常の変数はこう、配列はこう、定数はこう、文字型はこう・・・
というものを参考にしたいです。
612デフォルトの名無しさん
2011/06/10(金) 22:10:28.97 >>611
システムハンガリアンを採用するかどうか悩むほど大きなものをawkで書いたことが無い
システムハンガリアンを採用するかどうか悩むほど大きなものをawkで書いたことが無い
613かあた
2011/06/13(月) 18:37:34.88 、5なわやあふぉt( ())
614デフォルトの名無しさん
2011/06/15(水) 21:51:26.93 >>611
遅レスだが、型_内容の説明_名前みたくしてる。名前が一文字だとそのままだけど。
グローバル変数とローカル変数のどっち弄ってるのか分かりやすいように、ローカル変数は必ずlで始めるようにしてる。
d_per_shouhizei = 5.0とかね。
遅レスだが、型_内容の説明_名前みたくしてる。名前が一文字だとそのままだけど。
グローバル変数とローカル変数のどっち弄ってるのか分かりやすいように、ローカル変数は必ずlで始めるようにしてる。
d_per_shouhizei = 5.0とかね。
615デフォルトの名無しさん
2011/06/20(月) 18:37:26.17 gawkでBINMODEを設定すればバイナリーの入出力ができるのはわかるのですが、
入力されたバイナリーを16進ダンプして表示するにはどうしたらよいでしょうか?
od等の外部コマンドを使う意外に方法があればお教えください。
入力されたバイナリーを16進ダンプして表示するにはどうしたらよいでしょうか?
od等の外部コマンドを使う意外に方法があればお教えください。
616デフォルトの名無しさん
2011/06/20(月) 19:17:07.50 printf("%02x\n", $1);
617天使 ◆uL5esZLBSE
2011/07/05(火) 00:15:13.83 二度と話かけんなよ
お前らってどうみてもゴミだよな
お前らってどうみてもゴミだよな
618デフォルトの名無しさん
2011/07/06(水) 14:04:55.24 ゴミんなさい
619デフォルトの名無しさん
2011/07/14(木) 23:55:15.84 >>595
gawk4.0.0でa[0][0]=1も可能になったじゃないか
gawk4.0.0でa[0][0]=1も可能になったじゃないか
620デフォルトの名無しさん
2011/07/30(土) 19:46:15.81 超初心者の質問で申し訳ありません。以下のようなデータを
aaa 10
bbb 20
ccc 30
aaa 30
bbb 30
aaa 15
ccc 30
ddd 20
以下のようにまとめたいのですが、どうしたらいいでしょうか?
aaa 55
bbb 50
ccc 60
ddd 25
aaa 10
bbb 20
ccc 30
aaa 30
bbb 30
aaa 15
ccc 30
ddd 20
以下のようにまとめたいのですが、どうしたらいいでしょうか?
aaa 55
bbb 50
ccc 60
ddd 25
621デフォルトの名無しさん
2011/07/30(土) 19:53:38.97 ddd 20 ではないかと思うがこんな感じかな
awk '{a[$1]+=$2} END {for (b in a) {print b " " a[b]}}' | sort
awk '{a[$1]+=$2} END {for (b in a) {print b " " a[b]}}' | sort
622デフォルトの名無しさん
2011/07/30(土) 23:15:27.52 Gawk4ならPROCINFO["sorted_in"]の設定で最後のsortが要らなくなる
623620
2011/07/30(土) 23:22:20.03 >621
ありがとうございます!うまくいきました。
ありがとうございます!うまくいきました。
624デフォルトの名無しさん
2011/07/31(日) 15:24:48.76 gawkはもう別言語なイメージ。普段mawk使ってると
625デフォルトの名無しさん
2011/08/16(火) 22:48:21.64 ここって生きてますか?
626デフォルトの名無しさん
2011/08/18(木) 01:56:26.63 生きてますん
627デフォルトの名無しさん
2011/08/19(金) 00:53:44.39 生きていることを願って質問を。
WIN32のEXE一つで、下のTEST.AWKがマトモに動くAWKを探しています。
これら以外にありますか?
http://hinadori.atnifty.com/~wills/program/gawkm115.zip
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/376460/pack/win95/util/text/awk/gawk-mbcs-win32-20051223.zip?ds
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/80308/pack/win95/util/text/awk/mw32r27.lzh?ds
Cygwin版も試したのですがダメでした。
TEST.AWK
{ gsub("[0-9]","x",$0) ; gsub("ソ","ソ",$0) ; gsub("T","T",$0) ; print }
TEST.DAT
アイウエオカキクケコサシスセソ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
WIN32のEXE一つで、下のTEST.AWKがマトモに動くAWKを探しています。
これら以外にありますか?
http://hinadori.atnifty.com/~wills/program/gawkm115.zip
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/376460/pack/win95/util/text/awk/gawk-mbcs-win32-20051223.zip?ds
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/80308/pack/win95/util/text/awk/mw32r27.lzh?ds
Cygwin版も試したのですがダメでした。
TEST.AWK
{ gsub("[0-9]","x",$0) ; gsub("ソ","ソ",$0) ; gsub("T","T",$0) ; print }
TEST.DAT
アイウエオカキクケコサシスセソ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
628627
2011/08/19(金) 01:00:20.60 TEST.DATは、空白が入っています。
専ブラのポップアップをコピペして下さい。
専ブラのポップアップをコピペして下さい。
629デフォルトの名無しさん
2011/08/19(金) 06:26:54.92 ウチに帰ってから調べてみるよ
630デフォルトの名無しさん
2011/08/19(金) 11:02:41.54631デフォルトの名無しさん
2011/08/19(金) 11:55:06.25 (CygwinならUTF8じゃないとうまく動かないけど)Shift JISで動作させたいってことかな?
事前にTEST.DATをnkf -wに通したら駄目かな。
事前にTEST.DATをnkf -wに通したら駄目かな。
632629
2011/08/19(金) 21:59:57.43 >>627
スクリプトもDATもSJISで試したけど、上記3つのうち、gawk-mbcs-win32-20051223.zipはダメだったよ。
1行目がこんなんなる。
アxxエオカキクxコサxxxソ
手持ちの
GNU Awk 3.1.7(windows special Nov 24 2009)
で、--ctype=SJISやっても同じ結果になるね。
スクリプト、DATをUTF-8にして、--ctype=UTF8やってリダイレクトしたファイルは正常な結果が出るよ。
リダイレクトしないでコマンドプロンプトに表示させると化けるけど。
スクリプトもDATもSJISで試したけど、上記3つのうち、gawk-mbcs-win32-20051223.zipはダメだったよ。
1行目がこんなんなる。
アxxエオカキクxコサxxxソ
手持ちの
GNU Awk 3.1.7(windows special Nov 24 2009)
で、--ctype=SJISやっても同じ結果になるね。
スクリプト、DATをUTF-8にして、--ctype=UTF8やってリダイレクトしたファイルは正常な結果が出るよ。
リダイレクトしないでコマンドプロンプトに表示させると化けるけど。
633デフォルトの名無しさん
2011/08/19(金) 23:18:25.14 EUCなら半角カナもうまくやってくれるんだが…
634デフォルトの名無しさん
2011/08/24(水) 08:07:37.54 gawkはガンガン機能を拡張してるけど、
そろそろOOP対応してくれないかな。
awk++とかあるけど、標準でOOPできれは便利。
そろそろOOP対応してくれないかな。
awk++とかあるけど、標準でOOPできれは便利。
635デフォルトの名無しさん
2011/08/24(水) 22:44:37.24 > OOP
...もはやawkでやる意味が無いw 他にいくらでもある別の言語でいいじゃん
...もはやawkでやる意味が無いw 他にいくらでもある別の言語でいいじゃん
636デフォルトの名無しさん
2011/08/25(木) 01:14:17.45 awkに在ると便利かもと思うのは参照値くらいかな
配列や関数への参照を値として取り出し格納したり
逆にその値から元の配列にアクセスしたり元の関数を呼んだり出来ると
相当に複雑なデータ構造が表現可能になる、それこそOOPっぽいことも可能だし
でもあんまりややこしいことやるならPerlでいいから必須ではないね
配列や関数への参照を値として取り出し格納したり
逆にその値から元の配列にアクセスしたり元の関数を呼んだり出来ると
相当に複雑なデータ構造が表現可能になる、それこそOOPっぽいことも可能だし
でもあんまりややこしいことやるならPerlでいいから必須ではないね
637デフォルトの名無しさん
2011/08/25(木) 02:28:23.99 > 関数を呼んだり
変数の値を関数名として
var = "sage";
@var();
ってできるけど、それとは違うのん?
変数の値を関数名として
var = "sage";
@var();
ってできるけど、それとは違うのん?
638デフォルトの名無しさん
2011/08/25(木) 04:07:56.67 およ、もうあるのかw
最近のawkは分からねえ…ってことは、配列への参照を使って入れ子の配列とか既に作れちゃったりするのか?
最近のawkは分からねえ…ってことは、配列への参照を使って入れ子の配列とか既に作れちゃったりするのか?
639デフォルトの名無しさん
2011/08/25(木) 10:56:54.36 配列の配列は作れるよ。gawk4なら。
640デフォルトの名無しさん
2011/08/25(木) 19:51:33.84 (´_ゝ`)フーン
641デフォルトの名無しさん
2011/08/25(木) 20:52:51.07 class human {
property name
property sex
property age
method new(x, y, z) {
name = x
sex = y
age = z
}
method say() {
printf("私は%s。%d歳の%sです。\n",name, age, sex)
}
}
class japanese : human {
property name
property sex
property age
method say() {
printf("私は%s。%d歳の%sです。国籍は日本です。\n", name, age, sex)
}
}
BEGIN {
alice = human.new("アリス", "女", 11)
taro = japanese.new("太郎", "男", 15)
yuka = japanese.new("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
}
property name
property sex
property age
method new(x, y, z) {
name = x
sex = y
age = z
}
method say() {
printf("私は%s。%d歳の%sです。\n",name, age, sex)
}
}
class japanese : human {
property name
property sex
property age
method say() {
printf("私は%s。%d歳の%sです。国籍は日本です。\n", name, age, sex)
}
}
BEGIN {
alice = human.new("アリス", "女", 11)
taro = japanese.new("太郎", "男", 15)
yuka = japanese.new("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
}
642641
2011/08/25(木) 20:58:10.41 >>635
http://code.google.com/p/lawker/source/browse/fridge/lib/bash/awk%2B%2B/
これを使えばこの程度のOOPはどうにかできる。
本当にこの程度でいいからOOPに対応してほしい。
使う人はほとんどいないと思うが、全くできないのも困る。
http://code.google.com/p/lawker/source/browse/fridge/lib/bash/awk%2B%2B/
これを使えばこの程度のOOPはどうにかできる。
本当にこの程度でいいからOOPに対応してほしい。
使う人はほとんどいないと思うが、全くできないのも困る。
643デフォルトの名無しさん
2011/08/25(木) 22:07:53.46 それは最早awkである必要が全く無い
644デフォルトの名無しさん
2011/08/26(金) 06:00:04.19 function Human(self,name,sex,age) {
self["property___name"] = name
self["property___sex"] = sex
self["property___age"] = age
self["method___say"] = "Human___say"
}
function Human___say(self) {
printf "私は%s。%d歳の%sです。\n", self["property___name"], self["property___age"], self["property___sex"]
}
function Japanese(self,name,sex,age) {
Human(self,name,sex,age)
self["method___say"] = "Japanese___say"
}
function Japanese___say(self) {
printf "私は%s。%d歳の%sです。国籍は日本です。\n", self["property___name"], self["property___age"], self["property___gender"]
}
function methodcall(obj,methodname, m) {
m = obj["method___" methodname]
@m(obj)
}
BEGIN {
Human(alice, "アリス", "女", 11)
Japanese(taro, "太郎", "男", 15)
Japanese(yuka, "由佳", "女", 18)
methodcall(alice,"say")
methodcall(taro,"say")
methodcall(yuka,"say")
}
self["property___name"] = name
self["property___sex"] = sex
self["property___age"] = age
self["method___say"] = "Human___say"
}
function Human___say(self) {
printf "私は%s。%d歳の%sです。\n", self["property___name"], self["property___age"], self["property___sex"]
}
function Japanese(self,name,sex,age) {
Human(self,name,sex,age)
self["method___say"] = "Japanese___say"
}
function Japanese___say(self) {
printf "私は%s。%d歳の%sです。国籍は日本です。\n", self["property___name"], self["property___age"], self["property___gender"]
}
function methodcall(obj,methodname, m) {
m = obj["method___" methodname]
@m(obj)
}
BEGIN {
Human(alice, "アリス", "女", 11)
Japanese(taro, "太郎", "男", 15)
Japanese(yuka, "由佳", "女", 18)
methodcall(alice,"say")
methodcall(taro,"say")
methodcall(yuka,"say")
}
645デフォルトの名無しさん
2011/08/26(金) 06:01:35.02 ごめん一部genderになってるからsexに直しといて
とりあえず、こんな感じでgawk4でもOOP自体は出来るよって話
とりあえず、こんな感じでgawk4でもOOP自体は出来るよって話
646デフォルトの名無しさん
2011/08/27(土) 15:07:17.61647デフォルトの名無しさん
2011/08/27(土) 15:58:44.09 やっぱ別言語使うべきだろ
648デフォルトの名無しさん
2011/08/27(土) 16:10:36.72 本当に欲しいんなら、gawkのMLにこうすればOOP実現できることを発見したんだけど、
これの糖衣構文を用意してくれって投稿するといいんじゃね
switchも実装されてるし、欲しい人が居ると分かれば付けてくれるかもよ
これの糖衣構文を用意してくれって投稿するといいんじゃね
switchも実装されてるし、欲しい人が居ると分かれば付けてくれるかもよ
649デフォルトの名無しさん
2011/08/27(土) 16:25:08.65 #! /usr/bin/env python
# -*- coding: utf-8 -*-
class human:
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。")
class japanese(human):
def __init(self):
super(human, self).__init__(self)
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。国籍は日本です。")
if __name__ == "__main__":
alice = human("アリス", "女", 11)
taro = japanese("太郎", "男", 15)
yuka = japanese("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
# -*- coding: utf-8 -*-
class human:
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。")
class japanese(human):
def __init(self):
super(human, self).__init__(self)
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。国籍は日本です。")
if __name__ == "__main__":
alice = human("アリス", "女", 11)
taro = japanese("太郎", "男", 15)
yuka = japanese("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
650デフォルトの名無しさん
2011/08/27(土) 16:26:25.23651デフォルトの名無しさん
2011/08/27(土) 16:53:49.92 そりゃawkはOOPLではないからな
あくまでシェルのお供でいいと思うんだ
そしてそこに高度なOOP機能は要るとは思えない
どちらかと言えばフィールド抽出とかをもっと便利にすべきだよ
あくまでシェルのお供でいいと思うんだ
そしてそこに高度なOOP機能は要るとは思えない
どちらかと言えばフィールド抽出とかをもっと便利にすべきだよ
652デフォルトの名無しさん
2011/09/17(土) 15:34:39.29 cygwin以外でgawk4.0をwindowsで使おうと思ったら、バイナリはどこで入手できもうすかね?
653デフォルトの名無しさん
2011/09/17(土) 16:28:58.78 cygwin で駄目な理由が分からないから教えられない。
654デフォルトの名無しさん
2011/09/18(日) 08:02:36.95655デフォルトの名無しさん
2011/09/19(月) 13:00:55.06 >654 さんくすこ
>653 awkの実行形式だけ入手すれば良いようにしたいのさ。
>653 awkの実行形式だけ入手すれば良いようにしたいのさ。
656デフォルトの名無しさん
2011/09/19(月) 14:01:43.39 バイナリ互換のWindowsなのに、cygwinてexeをもってくだけじゃ使えないの?
657デフォルトの名無しさん
2011/09/19(月) 16:07:37.39 物によっては使えたような気がする。
cygwin1.dllだっけ?にパスが通ってれば大体使えたような気がする。
cygwin1.dllだっけ?にパスが通ってれば大体使えたような気がする。
658デフォルトの名無しさん
2011/09/19(月) 17:00:12.76 結構沢山のdllが要るよ
コマンドによるけど
コマンドによるけど
659デフォルトの名無しさん
2011/10/24(月) 01:55:49.24 教えてください。英語得意な人
http://www.gnu.org/s/gawk/manual/gawk.html#Array-Sorting-Functions
の asort(), asorti()で使うユーザー定義の比較関数について
3番目の引数とPROCINFO["sorted_in"]に設定するのと違うのか同じなのか?
それと
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
に書いてある3番目の引数の説明("descending"とか)が両立してんの?
http://www.gnu.org/s/gawk/manual/gawk.html#Array-Sorting-Functions
の asort(), asorti()で使うユーザー定義の比較関数について
3番目の引数とPROCINFO["sorted_in"]に設定するのと違うのか同じなのか?
それと
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
に書いてある3番目の引数の説明("descending"とか)が両立してんの?
660デフォルトの名無しさん
2011/10/24(月) 11:34:13.18 http://www.gnu.org/s/gawk/manual/gawk.html#Array-Sorting-Functions
As with PROCINFO["sorted_in"], this argument may be the name of a user-defined function, ....
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
The third argument can also be a user-defined function name ....
第三引数の値と同名の関数が定義済みならそれを利用するとか、
そういう方法で区別してるんじゃないの
As with PROCINFO["sorted_in"], this argument may be the name of a user-defined function, ....
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
The third argument can also be a user-defined function name ....
第三引数の値と同名の関数が定義済みならそれを利用するとか、
そういう方法で区別してるんじゃないの
661デフォルトの名無しさん
2011/10/24(月) 13:33:04.59 >>659
比較関数の与え方はPROCINFO["sorted_in"]の場合と同じってことだろ。
自分で定義した関数の名前でもいいし、11.2.1.2に書いてあるようにすでに用意
されている@〜を使ってもいい。
比較関数の与え方はPROCINFO["sorted_in"]の場合と同じってことだろ。
自分で定義した関数の名前でもいいし、11.2.1.2に書いてあるようにすでに用意
されている@〜を使ってもいい。
662デフォルトの名無しさん
2011/11/14(月) 21:59:05.28 個人的には、GAWKにはあと、Cで書いた関数の呼び出しというか
GAWKで呼ぶ関数をCで書ける機能が欲しいと思ってるんだけど、
ここ見る限り世間的にはあんまり需要ないんかねぇ。
まぁ、それやるくらいならGAWK自体に変更を加えて再コンパイルしろってことかもしれないけど。
GAWKで呼ぶ関数をCで書ける機能が欲しいと思ってるんだけど、
ここ見る限り世間的にはあんまり需要ないんかねぇ。
まぁ、それやるくらいならGAWK自体に変更を加えて再コンパイルしろってことかもしれないけど。
663デフォルトの名無しさん
2011/11/15(火) 01:44:31.01 PとかR使え言われると思う。
664デフォルトの名無しさん
2011/11/15(火) 01:58:32.43 >>662
ttp://www.gnu.org/s/gawk/manual/html_node/Dynamic-Extensions.html
じゃダメ?将来的にさらに拡張される可能性はあるみたいだけど
ttp://www.gnu.org/s/gawk/manual/html_node/Dynamic-Extensions.html
じゃダメ?将来的にさらに拡張される可能性はあるみたいだけど
665デフォルトの名無しさん
2011/12/09(金) 00:35:09.18 最近awkcardを知って座右に置いてるのだが、日本語版って存在するのだろうか。
666デフォルトの名無しさん
2011/12/22(木) 16:57:35.32 ttp://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_271
ここに書いてある通りにしても日本語に翻訳されません
どうしてですか?
環境は LinuxMint12 、 GNU Awk 3.1.8 です
ここに書いてある通りにしても日本語に翻訳されません
どうしてですか?
環境は LinuxMint12 、 GNU Awk 3.1.8 です
667デフォルトの名無しさん
2011/12/22(木) 18:01:49.60 >>666
その通りにやったと言うのなら、何故poファイルを提示しないのかね、ダミアン君。
その通りにやったと言うのなら、何故poファイルを提示しないのかね、ダミアン君。
668デフォルトの名無しさん
2011/12/22(木) 18:07:45.38 >>667
poは作成しましたし、moも所定のディレクトリにあります。
poは自分で編集しても、そのサイトの内容をコピペしてもダメでした。
$ cat gettext.po
#: gettext.awk:10
msgid "********** Count Prime Number **********"
msgstr "========== 素数を数える =========="
#: gettext.awk:14
msgid "2 is a prime number."
msgstr "2 は素数です。"
#: gettext.awk:24
msgid "%d is a prime number.\n"
""
msgstr "%d は素数です。\n"
$ ls ja_JP/LC_MESSAGES/
gettext.mo
poは作成しましたし、moも所定のディレクトリにあります。
poは自分で編集しても、そのサイトの内容をコピペしてもダメでした。
$ cat gettext.po
#: gettext.awk:10
msgid "********** Count Prime Number **********"
msgstr "========== 素数を数える =========="
#: gettext.awk:14
msgid "2 is a prime number."
msgstr "2 は素数です。"
#: gettext.awk:24
msgid "%d is a prime number.\n"
""
msgstr "%d は素数です。\n"
$ ls ja_JP/LC_MESSAGES/
gettext.mo
669デフォルトの名無しさん
2011/12/22(木) 18:10:02.43 結果はこの通りです。
$ LC_ALL=ja_JP gawk -f gettext.awk 10
********** Count Prime Number **********
2 is a prime number.
3 is a prime number.
5 is a prime number.
7 is a prime number.
$ LC_ALL=ja_JP gawk -f gettext.awk 10
********** Count Prime Number **********
2 is a prime number.
3 is a prime number.
5 is a prime number.
7 is a prime number.
670デフォルトの名無しさん
2012/01/12(木) 13:56:36.33 ずいぶんawkから離れていて久しぶりに使ったら
nawkに日本語のバグがあることにしばらく気づかなかった
substr()でutf-8のテキストを切り出すとおかしな値になる
gawkでは直っている
nawkに日本語のバグがあることにしばらく気づかなかった
substr()でutf-8のテキストを切り出すとおかしな値になる
gawkでは直っている
671デフォルトの名無しさん
2012/01/12(木) 19:50:49.28 そもそもUTF-8に対応してたっけ
672デフォルトの名無しさん
2012/01/13(金) 00:28:07.37 ttp://blog.livedoor.jp/corbie/archives/cat_94960.html
残念ながら、シフトJIS、UTF-8両方で正常に動作しそうなWindows版gawkは候補の中にありませんでした。
残念ながら、シフトJIS、UTF-8両方で正常に動作しそうなWindows版gawkは候補の中にありませんでした。
673デフォルトの名無しさん
2012/01/13(金) 07:52:50.95 Linuxでは普通に動くが…
674デフォルトの名無しさん
2012/04/29(日) 21:07:39.93 ファイル名が"*.txt"の一覧を取得するとき、"\.txt"でマッチさせると、任意の一文字.(ドット)と解釈されてしまうんですが、いい方法無いでしょうか?
675デフォルトの名無しさん
2012/04/29(日) 22:04:14.36 GNU Awk 3.1.7だとドットにマッチしたけどそもそもawkの話?
具体的にコマンドがほしいな
具体的にコマンドがほしいな
676デフォルトの名無しさん
2012/04/29(日) 22:08:23.01 昭和の頃覚えたアセンブラとC言語
これがあったから
いまだに自分が損な業界で飯を食ってる
これがあったから
いまだに自分が損な業界で飯を食ってる
677デフォルトの名無しさん
2012/04/29(日) 22:36:10.83 >>676
そこからjavaに行ってスマホアプリ開発ならもう一花咲いたかもしれませんねw
そこからjavaに行ってスマホアプリ開発ならもう一花咲いたかもしれませんねw
678デフォルトの名無しさん
2012/04/29(日) 23:09:38.43 馬鹿には無理
679674
2012/04/30(月) 18:07:43.22 >>675
ls | awk '{ if( match($0,"\.txt") > 0) print $0 }'
↑会社のサーバ上でこんな感じのことやろうとしてたんですが、
「gawk: 警告: エスケープシーケンス `\.' は `.' と同等に扱われます」
とメッセージが出力され、ドットが任意の一文字?と解釈されて困っていましたが、
自己解決しました。(自宅のLinuxPCで動作確認しました。GAWK3.1.7及び4.0.1)
"\.txt"では無くて、".txt"で良かったんですね。
お騒がせしました。
もしかしたら、会社のサーバ(RHEL)のGAWKが古くて解決できてないかもしれませんが。
ls | awk '{ if( match($0,"\.txt") > 0) print $0 }'
↑会社のサーバ上でこんな感じのことやろうとしてたんですが、
「gawk: 警告: エスケープシーケンス `\.' は `.' と同等に扱われます」
とメッセージが出力され、ドットが任意の一文字?と解釈されて困っていましたが、
自己解決しました。(自宅のLinuxPCで動作確認しました。GAWK3.1.7及び4.0.1)
"\.txt"では無くて、".txt"で良かったんですね。
お騒がせしました。
もしかしたら、会社のサーバ(RHEL)のGAWKが古くて解決できてないかもしれませんが。
680デフォルトの名無しさん
2012/04/30(月) 20:27:16.48 >>679
match() の第二引数に文字列を与えた場合は事前に正規表現への型変換が行われるが、
その際にエスケープが外れて /.txt/ と同等になってしまう、 ということかと。
つまり "\\.txt" とするか、 正規表現の /\.txt/ を与えればよい。
The GNU Awk User's Guide にもこの現象についての説明はあるが、
~ !~ 演算子についてしか触れられていない。
ttp://www.kt.rim.or.jp/~kbk/gawk-30/gawk_5.html#SEC32
match() の第二引数に文字列を与えた場合は事前に正規表現への型変換が行われるが、
その際にエスケープが外れて /.txt/ と同等になってしまう、 ということかと。
つまり "\\.txt" とするか、 正規表現の /\.txt/ を与えればよい。
The GNU Awk User's Guide にもこの現象についての説明はあるが、
~ !~ 演算子についてしか触れられていない。
ttp://www.kt.rim.or.jp/~kbk/gawk-30/gawk_5.html#SEC32
681デフォルトの名無しさん
2012/05/24(木) 00:27:31.74 gawk4.0.2付属の原版ではmatchの説明にもその辺触れられてるね。
http://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions
誰かこのバージョン日本語化してないかな。
http://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions
誰かこのバージョン日本語化してないかな。
682デフォルトの名無しさん
2012/07/12(木) 02:26:40.35 FIFOな感じの先入れ先出しのバッファには何使えばいい?
というか、
Arrayで、たとえばA[3] からA[8]までのデータをA[1]からA[6]に動かすには何が一番早い?
できれば配列は1つしか使いたくないのだが、無理だろうか…
というか、
Arrayで、たとえばA[3] からA[8]までのデータをA[1]からA[6]に動かすには何が一番早い?
できれば配列は1つしか使いたくないのだが、無理だろうか…
683デフォルトの名無しさん
2012/07/12(木) 09:23:22.92 速さを求めるなら毎度全要素ずらすより、読み出し位置と書き込み位置の添字持って
管理した方がたいてい速い
管理した方がたいてい速い
684デフォルトの名無しさん
2012/07/12(木) 10:14:32.78 awkには連想配列しかないしな
685デフォルトの名無しさん
2012/07/14(土) 14:35:06.22 リングバッファで何とかなるならリングバッファかな
686デフォルトの名無しさん
2012/07/14(土) 22:27:17.73 >>682
BEGIN{
QMAX=3
QTopPos=0;QTailPos=0;QNum=0;
deQ();
enQ("1");deQ();
enQ("a");enQ("b");enQ("c");enQ("x");deQ();deQ();deQ();deQ();
}
function enQ(PushVal){
if (QNum+1 > QMAX){print "おなかいっぱい"; return;}
nextPos = (QTopPos+1) % QMAX;
queue[QTopPos] = PushVal;
QTopPos=nextPosQNum++;
}
function deQ(){
if (QNum < 1){print "からっぽ"; return}
QNum--; TailVal=queue[QTailPos]
QTailPos = (QTailPos +1) % QMAX;
print TailVal;
return TailVal;
}
BEGIN{
QMAX=3
QTopPos=0;QTailPos=0;QNum=0;
deQ();
enQ("1");deQ();
enQ("a");enQ("b");enQ("c");enQ("x");deQ();deQ();deQ();deQ();
}
function enQ(PushVal){
if (QNum+1 > QMAX){print "おなかいっぱい"; return;}
nextPos = (QTopPos+1) % QMAX;
queue[QTopPos] = PushVal;
QTopPos=nextPosQNum++;
}
function deQ(){
if (QNum < 1){print "からっぽ"; return}
QNum--; TailVal=queue[QTailPos]
QTailPos = (QTailPos +1) % QMAX;
print TailVal;
return TailVal;
}
687686
2012/07/14(土) 22:54:06.64 ↑の結果はこんな感じ。
>からっぽ
>1
>おなかいっぱい
>a
>b
>c
>からっぽ
>>685の書いているリングバッファ実装です。
enqueue,dequeue回数が多いならリングバッファで良いと思う。
大抵の場合はQMAXに大きな値を設定すれば事足りるハズだけど
上限が決定できない等の事情があればdelete arrayを使った単純な配列管理かな。
ただ添え字が数値上限を超えない様な工夫は必要だね。
>からっぽ
>1
>おなかいっぱい
>a
>b
>c
>からっぽ
>>685の書いているリングバッファ実装です。
enqueue,dequeue回数が多いならリングバッファで良いと思う。
大抵の場合はQMAXに大きな値を設定すれば事足りるハズだけど
上限が決定できない等の事情があればdelete arrayを使った単純な配列管理かな。
ただ添え字が数値上限を超えない様な工夫は必要だね。
688デフォルトの名無しさん
2012/07/15(日) 21:09:36.15 リングでも上限を定めると入力ストリームの上限が不明な場合まずいことになるので、現在は
A=入力Array,C一時保管,i,k,n,p
k=1;C[0]=0;
for(i=1;i<=A[0];i++){n=0;while(k<i && A[k++]=C[n+=1]);if(n){
delete C[C[0]+1];C[0]-=n;p=0;while(C[p+=1]=C[n+=1]);}p=1;
while(match(substr(A[i],p),re)){p+=RSTART-1;n=substr(A[i],p,RLENGTH);
if(k<i){A[k++]=n;}else{C[C[0]+=1]=n;};p+=RLENGTH;}};n=1;
while(A[k++]=C[n]){delete C[n++];};A[0]+=C[0]-1;C[0]=0;
を使っている。
re=regexpとして、Array Aに一致するデータがあれぼそれを取得、結果をArray Aに出力、A[0]に合計が記載。
これ以上(コードサイズ、ある程度の速度、メモリの使用量を極力少なく)という条件で最適化できるだろうか…
だれか頼む。
入力と出力先が同じでも、別でも作動するコードなら尚のこと良いのだが…
A=入力Array,C一時保管,i,k,n,p
k=1;C[0]=0;
for(i=1;i<=A[0];i++){n=0;while(k<i && A[k++]=C[n+=1]);if(n){
delete C[C[0]+1];C[0]-=n;p=0;while(C[p+=1]=C[n+=1]);}p=1;
while(match(substr(A[i],p),re)){p+=RSTART-1;n=substr(A[i],p,RLENGTH);
if(k<i){A[k++]=n;}else{C[C[0]+=1]=n;};p+=RLENGTH;}};n=1;
while(A[k++]=C[n]){delete C[n++];};A[0]+=C[0]-1;C[0]=0;
を使っている。
re=regexpとして、Array Aに一致するデータがあれぼそれを取得、結果をArray Aに出力、A[0]に合計が記載。
これ以上(コードサイズ、ある程度の速度、メモリの使用量を極力少なく)という条件で最適化できるだろうか…
だれか頼む。
入力と出力先が同じでも、別でも作動するコードなら尚のこと良いのだが…
689デフォルトの名無しさん
2012/07/17(火) 00:02:18.87 これはひどい
デバッグも拡張も無理じゃね
デバッグも拡張も無理じゃね
690デフォルトの名無しさん
2012/07/17(火) 22:03:00.62 基本的に一度作って後は必要に応じてコピペだがらな。他には
function grep( o, re, p, B, this, a ){
B[0]=0;if(o~"-v"){while((getline v < p)>0){if(!match(v,re))B[B[0]+=1]=v;}return B[0];};
if(o~"-o"){while((getline v < p)>0){a=v;while(match(a,re)){B[B[0]+=1]=substr(a,RSTART,RLENGTH);
a=substr(a,RSTART+RLENGTH);}};return B[0];};while((getline v < p)>0){if(match(v,re))B[B[0]+=1]=v;}return B[0];
}
なんかも良く使う。grep("-o","pattern","/var/log",data);みたいな感じで。前のはagrep("-v",pattern,B,C)の一部分。
日ごろのメンテでちょっとした手作業じゃめんどいの組むときに、ほぼ数分で組みあがるのが楽なんだよ。
サブプロセスとしてgrep呼び出すのがコストかかる時とか、perlが破損した状況でのリカバリースクリプトとして組んだのが元だけど。
カーネルさえ生きていれば後はawkバイナリ流し込めば使え、shが半分死んでいてもなんとか動くし。
function grep( o, re, p, B, this, a ){
B[0]=0;if(o~"-v"){while((getline v < p)>0){if(!match(v,re))B[B[0]+=1]=v;}return B[0];};
if(o~"-o"){while((getline v < p)>0){a=v;while(match(a,re)){B[B[0]+=1]=substr(a,RSTART,RLENGTH);
a=substr(a,RSTART+RLENGTH);}};return B[0];};while((getline v < p)>0){if(match(v,re))B[B[0]+=1]=v;}return B[0];
}
なんかも良く使う。grep("-o","pattern","/var/log",data);みたいな感じで。前のはagrep("-v",pattern,B,C)の一部分。
日ごろのメンテでちょっとした手作業じゃめんどいの組むときに、ほぼ数分で組みあがるのが楽なんだよ。
サブプロセスとしてgrep呼び出すのがコストかかる時とか、perlが破損した状況でのリカバリースクリプトとして組んだのが元だけど。
カーネルさえ生きていれば後はawkバイナリ流し込めば使え、shが半分死んでいてもなんとか動くし。
691686
2012/07/21(土) 23:12:03.74 >>688
BEGIN{
QMAX=9007199254740991
QTopPos=QTailPos=QNum=0;
hitTop=0;
A[++z]="hoge";
A[++z]="1 2 3 4 5";
A[++z]="fuga";
A[0]=z;
for(i=1;i<=A[0];i++){
p=1;
while(match(substr(A[i],p),/[0-9]+/)){
p+=RSTART-1;
enQ(substr(A[i],p,RLENGTH));
p+=RLENGTH;
}
if(QNum>0){
while(QNum && hitTop<i)A[++hitTop]=deQ();
}else{
delete A[i];
}
};
if(QNum>0) while(QNum)A[++A[0]]=deQ();
for(z=1;z<=A[0];z++)print "A[" z "]:" A[z];
}
BEGIN{
QMAX=9007199254740991
QTopPos=QTailPos=QNum=0;
hitTop=0;
A[++z]="hoge";
A[++z]="1 2 3 4 5";
A[++z]="fuga";
A[0]=z;
for(i=1;i<=A[0];i++){
p=1;
while(match(substr(A[i],p),/[0-9]+/)){
p+=RSTART-1;
enQ(substr(A[i],p,RLENGTH));
p+=RLENGTH;
}
if(QNum>0){
while(QNum && hitTop<i)A[++hitTop]=deQ();
}else{
delete A[i];
}
};
if(QNum>0) while(QNum)A[++A[0]]=deQ();
for(z=1;z<=A[0];z++)print "A[" z "]:" A[z];
}
692686
2012/07/21(土) 23:44:24.03 691の続き
ちなみに、A[1]〜A[A[0]]をgrepして結果はA[1]〜A[?]に戻すスクリプトね。
複数件マッチする事があるので未処理行を上書きしないようにキュー使ってる。
function enQ(PushVal){
if (QNum+1 > QMAX){print "Queue Overflow"; exit;}
nextPos = (QTopPos+1) % QMAX;
QBody[QTopPos]=PushVal;
QTopPos=nextPos
QNum++;
}
function deQ(){
if (QNum<1){print "Illigal dequeue"; exit;}
QNum--;
TailVal=QBody[QTailPos];
delete QBody[QTailPos];
QTailPos=(QTailPos +1) % QMAX;
return TailVal;
}
リングバッファの上限超えたら終了させてるけど>>688の実装も上限超えたらバグるし許して。
計ってないけどループがない分早い筈。コードサイズはお察し。
メモリはA[]にデータ抱えてる時点でアウトな感じだけどA[]を適宜消すようにしといた。
出力先を別にしたいならA[]にdeQ()せず別変数にすればおk。
これで良い?
ちなみに、A[1]〜A[A[0]]をgrepして結果はA[1]〜A[?]に戻すスクリプトね。
複数件マッチする事があるので未処理行を上書きしないようにキュー使ってる。
function enQ(PushVal){
if (QNum+1 > QMAX){print "Queue Overflow"; exit;}
nextPos = (QTopPos+1) % QMAX;
QBody[QTopPos]=PushVal;
QTopPos=nextPos
QNum++;
}
function deQ(){
if (QNum<1){print "Illigal dequeue"; exit;}
QNum--;
TailVal=QBody[QTailPos];
delete QBody[QTailPos];
QTailPos=(QTailPos +1) % QMAX;
return TailVal;
}
リングバッファの上限超えたら終了させてるけど>>688の実装も上限超えたらバグるし許して。
計ってないけどループがない分早い筈。コードサイズはお察し。
メモリはA[]にデータ抱えてる時点でアウトな感じだけどA[]を適宜消すようにしといた。
出力先を別にしたいならA[]にdeQ()せず別変数にすればおk。
これで良い?
693688
2012/07/22(日) 09:36:17.43 >QMAX=9007199254740991
ワロタwww
俺のも確かにwhile(C[p+=1]=C[n+=1]);の部分で保持してるのすべて消費分だけ上に移動させてるのが無駄なので
そのループが無い分は確かに早いはず。
あと、恥ずかしながら尋ねたいのですが、俺>>688の実装で上限超えたらバグるをkwsk
なんか見落としてたのか今更ながら心配になってきた。
昔作ったやつなんで、結構な頻度使ってきたのだが今までバグに気づかなかった
しかしデータをメモリ上に展開するからどうしても上限が出てくるな…
awkで10GBぐらいの扱う時はgetlineでなんとかなるけど、やはりメモリマップやポインタが使えたら便利だよなぁ
パッチ作ったら需要あるかな?
ワロタwww
俺のも確かにwhile(C[p+=1]=C[n+=1]);の部分で保持してるのすべて消費分だけ上に移動させてるのが無駄なので
そのループが無い分は確かに早いはず。
あと、恥ずかしながら尋ねたいのですが、俺>>688の実装で上限超えたらバグるをkwsk
なんか見落としてたのか今更ながら心配になってきた。
昔作ったやつなんで、結構な頻度使ってきたのだが今までバグに気づかなかった
しかしデータをメモリ上に展開するからどうしても上限が出てくるな…
awkで10GBぐらいの扱う時はgetlineでなんとかなるけど、やはりメモリマップやポインタが使えたら便利だよなぁ
パッチ作ったら需要あるかな?
694デフォルトの名無しさん
2012/07/22(日) 11:41:46.83 >>693
691、ちょっと訂正。無駄にキュー使う分、元スクリプトから劣化してた。
> p+=RSTART-1;
>- enQ(substr(A[i],p,RLENGTH));
>+ if(hitTop+1<i){
>+ A[++hitTop]=substr(A[i],p,RLENGTH)
>+ }else{
>+ enQ(substr(A[i],p,RLENGTH));
>+ }
> p+=RLENGTH;
あと、良く考えたら出力先を別にするなら、そもそもキュー不要。
バグってのは687で数値上限云々と書いたとおり、
”C[0]+=1”がawkの整数の精度誤差なし演算可能上限を考慮していないだけ。
どのawkも多分そうだと思うけど、手元の環境下での実行結果↓
C:\>gawk --version
GNU Awk 3.1.7(windows special Nov 24 2009)
C:\>gawk "BEGIN{print 9007199254740990+1}" nul
9007199254740991
C:\>gawk "BEGIN{print 9007199254740991+1}" nul
9007199254740992
C:\>gawk "BEGIN{print 9007199254740992+1}" nul
9007199254740992
実際は(hddやメモリが先に死ぬので)
一行でこれだけ正規表現がhitする事は事実上無いし、
仮に発生しても検索結果が潰れるだけで、気付かない筈。
691、ちょっと訂正。無駄にキュー使う分、元スクリプトから劣化してた。
> p+=RSTART-1;
>- enQ(substr(A[i],p,RLENGTH));
>+ if(hitTop+1<i){
>+ A[++hitTop]=substr(A[i],p,RLENGTH)
>+ }else{
>+ enQ(substr(A[i],p,RLENGTH));
>+ }
> p+=RLENGTH;
あと、良く考えたら出力先を別にするなら、そもそもキュー不要。
バグってのは687で数値上限云々と書いたとおり、
”C[0]+=1”がawkの整数の精度誤差なし演算可能上限を考慮していないだけ。
どのawkも多分そうだと思うけど、手元の環境下での実行結果↓
C:\>gawk --version
GNU Awk 3.1.7(windows special Nov 24 2009)
C:\>gawk "BEGIN{print 9007199254740990+1}" nul
9007199254740991
C:\>gawk "BEGIN{print 9007199254740991+1}" nul
9007199254740992
C:\>gawk "BEGIN{print 9007199254740992+1}" nul
9007199254740992
実際は(hddやメモリが先に死ぬので)
一行でこれだけ正規表現がhitする事は事実上無いし、
仮に発生しても検索結果が潰れるだけで、気付かない筈。
695688
2012/07/22(日) 13:39:49.16 >9007199254740992
理論上、8192ペタバイトの同じデータ[aaa...]でregexp="."とすれば、発生するな…
IEEE 754の52bit制限だから、これ以上のでかい数字扱うならbig numbert対応のライブラリか,
"bc -q" |& で動かすか、xgawk、dnawkあたり使うべきだなぁ
昔誰かがbignumのawkスクリプト書いて放流していた覚えがあるのだが、
ググッても見つからん。手元にあるのはビット演算のやつだけだわ
いつかそれだけのデータをメモリ上に保持できるマシンを扱ってみたいものだ…
理論上、8192ペタバイトの同じデータ[aaa...]でregexp="."とすれば、発生するな…
IEEE 754の52bit制限だから、これ以上のでかい数字扱うならbig numbert対応のライブラリか,
"bc -q" |& で動かすか、xgawk、dnawkあたり使うべきだなぁ
昔誰かがbignumのawkスクリプト書いて放流していた覚えがあるのだが、
ググッても見つからん。手元にあるのはビット演算のやつだけだわ
いつかそれだけのデータをメモリ上に保持できるマシンを扱ってみたいものだ…
696デフォルトの名無しさん
2012/08/03(金) 02:35:23.75 awkってabsとかacosなどの基本的な算術関数が用意されてないんですね
今後も実装されることはないんでしょうか?
パイプでサクッとつないでワンラインで処理するのに重宝してたんですが・・・
代わりとなると、何使うのがよろしいですか?
できればperlは使いたくないです(どうしても好きになれない
今後も実装されることはないんでしょうか?
パイプでサクッとつないでワンラインで処理するのに重宝してたんですが・・・
代わりとなると、何使うのがよろしいですか?
できればperlは使いたくないです(どうしても好きになれない
697デフォルトの名無しさん
2012/08/03(金) 06:48:38.25 absは自分で書けばいいし、acos(x)はatan2(x, √(1.0 - x*x))と書けるから、
どちらも基本的ではないと判断して組み込みじゃないんだと思うけど。
PythonかRubyでいいんじゃない? ワンライナー向きではないけど。
どちらも基本的ではないと判断して組み込みじゃないんだと思うけど。
PythonかRubyでいいんじゃない? ワンライナー向きではないけど。
698デフォルトの名無しさん
2012/08/03(金) 07:37:24.41 >>696
ライブラリ(?)を拾って来ては?
ライブラリ(?)を拾って来ては?
699デフォルトの名無しさん
2012/08/03(金) 11:48:03.19 >>696
必要な関数値を計算するだけのプログラムをCで作っておいたら?
必要な関数値を計算するだけのプログラムをCで作っておいたら?
700デフォルトの名無しさん
2012/08/03(金) 20:21:59.43 昔それでベクトル演算して遊んだな
701デフォルトの名無しさん
2012/08/04(土) 09:23:47.83 Rubyはそこそこワンライナーも書ける感じがする、awkやPerlほどじゃないけどね
Pythonは流石にコード起こさないと辛いことが多いが
Pythonは流石にコード起こさないと辛いことが多いが
702デフォルトの名無しさん
2012/08/04(土) 10:27:49.07 awkでmatlabみたいなベクトル演算できるようにしてほしい
703デフォルトの名無しさん
2012/08/04(土) 16:48:36.10 awkでクラスを使えるようにしてほしい
704デフォルトの名無しさん
2012/08/04(土) 17:06:19.06 awkで全ての魔法少女を救ってほしい
705デフォルトの名無しさん
2012/08/04(土) 17:08:30.07 awkさんは魔女
706本田
2012/08/05(日) 07:21:28.03 Awk++
http://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
http://lawker.googlecode.com/svn/fridge/lib/bash/awk++/version21/awkpp21.zip
http://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
http://lawker.googlecode.com/svn/fridge/lib/bash/awk++/version21/awkpp21.zip
707デフォルトの名無しさん
2012/08/05(日) 09:56:26.63 デバッグ大変過ぎて死ぬる
$ 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 '?' は不正です。
$ 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 '?' は不正です。
708デフォルトの名無しさん
2012/08/22(水) 00:09:49.86 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;
}
これ以上削れるところ無いかな?
高速化+サイズ優先で、変数はできるだけ使う数を少なくとの条件で
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;
}
これ以上削れるところ無いかな?
高速化+サイズ優先で、変数はできるだけ使う数を少なくとの条件で
709デフォルトの名無しさん
2012/08/22(水) 09:51:11.01 >>708
その3つの条件の優先度がわからんな。
結構同じ部分式があるので変数に入れた方が変数は増えるけど短くなるし
場合によっては速度も速いとかありそうだけどどうなん?
例えばB[0]は特別な用途っぽいけどxとか1文字変数にしてreturnの直前に
書き戻した方が文字数は稼げる。
あと細かいがhoge+=1より++hogeの方が1文字短いとか、いらない「;」が
残ってるとか詰めが甘いところがまだあるね。
その3つの条件の優先度がわからんな。
結構同じ部分式があるので変数に入れた方が変数は増えるけど短くなるし
場合によっては速度も速いとかありそうだけどどうなん?
例えばB[0]は特別な用途っぽいけどxとか1文字変数にしてreturnの直前に
書き戻した方が文字数は稼げる。
あと細かいがhoge+=1より++hogeの方が1文字短いとか、いらない「;」が
残ってるとか詰めが甘いところがまだあるね。
710デフォルトの名無しさん
2012/09/30(日) 22:45:00.64 以下のようなデータの処理について質問いいでしょうか。
$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
$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
711デフォルトの名無しさん
2012/10/01(月) 11:28:30.42 疑問を提示。
$1が常に時刻で$2が速度のときの$3が速度なら、
30 up aのときに30 * 10で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になるんだけどね。
$1が常に時刻で$2が速度のときの$3が速度なら、
30 up aのときに30 * 10で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になるんだけどね。
712デフォルトの名無しさん
2012/10/01(月) 13:21:34.21 実装してみた。速度が途中に出てきてもいいように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;
}
--
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;
}
713デフォルトの名無しさん
2012/10/01(月) 20:30:33.48714デフォルトの名無しさん
2012/12/13(木) 11:40:43.98 awkにかわる同等のものあります?
715デフォルトの名無しさん
2012/12/13(木) 13:08:08.26 python
716デフォルトの名無しさん
2012/12/13(木) 13:13:55.85 >>715
awkみたいに使い勝手いいのかな?
awkみたいに使い勝手いいのかな?
717デフォルトの名無しさん
2012/12/13(木) 13:18:24.65 良いですよ
718デフォルトの名無しさん
2012/12/13(木) 13:24:31.23 >>717
ありがとす。勉強してみます
ありがとす。勉強してみます
719デフォルトの名無しさん
2012/12/13(木) 14:45:25.45 はい
720デフォルトの名無しさん
2013/02/06(水) 03:49:18.86 “任意の記号”を含んだシェル変数を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自体は渡されているはずですが、何が原因でしょうか?
[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自体は渡されているはずですが、何が原因でしょうか?
721デフォルトの名無しさん
2013/02/06(水) 11:23:41.42 >>720
いちぎょうめのひだりがわの var は、ひょうかのさいに
せいきひょうげんへのかたへんかんがおこなわれる。
$0 ~ /hoge$fuga/ {print "hoge$fuga"}
END {print "hoge$fuga"}
めたもじとなってしまうものは、じぜんあるいはこーどのなかで
えすけーぷするひつようがある。
いちぎょうめのひだりがわの var は、ひょうかのさいに
せいきひょうげんへのかたへんかんがおこなわれる。
$0 ~ /hoge$fuga/ {print "hoge$fuga"}
END {print "hoge$fuga"}
めたもじとなってしまうものは、じぜんあるいはこーどのなかで
えすけーぷするひつようがある。
722デフォルトの名無しさん
2013/02/06(水) 11:29:22.31 ~(チルダ)の右辺は正規表現として解釈されるから、"hoge" ~ /hoge$fuga/ でマッチするわけがない。
逆に寧ろ、"hoge$fuga" ~ /hoge/ ならマッチする。
逆に寧ろ、"hoge$fuga" ~ /hoge/ ならマッチする。
723デフォルトの名無しさん
2013/02/06(水) 11:33:09.61 >>720
>721も>722もどちらも原因。やりたいことをよく整理しよう。
>721も>722もどちらも原因。やりたいことをよく整理しよう。
724720
2013/02/06(水) 15:09:21.72 すいません、echo "hoge"ではなくecho "$var"でした。
ただ、結果は>>720と同じです。
要は入力ファイル内の「メタ文字込みの任意の文字列」を、別の「メタ文字と改行込みの任意の文字列」で置換する、
というのをメタ文字のエスケープ等の面倒な処理をせずにサクッとやりたいのですが、できますか?
ただ、結果は>>720と同じです。
要は入力ファイル内の「メタ文字込みの任意の文字列」を、別の「メタ文字と改行込みの任意の文字列」で置換する、
というのをメタ文字のエスケープ等の面倒な処理をせずにサクッとやりたいのですが、できますか?
725デフォルトの名無しさん
2013/02/07(木) 05:01:43.19 ムリ
予め「メタ文字と言っても $ しか出てこない」とか判ってるなら大したこと無いけど
一般化すればするほど面倒になる
予め「メタ文字と言っても $ しか出てこない」とか判ってるなら大したこと無いけど
一般化すればするほど面倒になる
726720
2013/02/07(木) 22:14:56.21 >>725
やはりそうですか。
今までこういった処理はsedでしこしこエスケープしてやってたんですが、いい加減面倒になったので、
たとえばfgrepみたいに正規表現をオフにして処理する方法はないかと探しているんですが、
awkでは無理ですか・・・。
やはりそうですか。
今までこういった処理はsedでしこしこエスケープしてやってたんですが、いい加減面倒になったので、
たとえばfgrepみたいに正規表現をオフにして処理する方法はないかと探しているんですが、
awkでは無理ですか・・・。
727デフォルトの名無しさん
2013/02/08(金) 11:20:14.98728デフォルトの名無しさん
2013/02/08(金) 19:27:47.04 >>726
fgrepなら index()関数じゃないの?
fgrepなら index()関数じゃないの?
729720
2013/02/09(土) 15:32:27.55 >>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
>単に一致なら正規表現なんか使わずに比較すればいいじゃん。
意味が分からないんですが、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
730デフォルトの名無しさん
2013/02/09(土) 17:49:52.25 /bin/shでごちょごちょやるのが好みなら、awkもfgrepも使わず、case文でやりゃいいんじゃないの。
731デフォルトの名無しさん
2013/02/09(土) 21:34:09.39 >>729
文字列の比較は等号でできるって認識はないの?
文字列の比較は等号でできるって認識はないの?
732デフォルトの名無しさん
2013/02/10(日) 14:31:49.57 >729
いや、その方法でも結局 ' はエスケープが必要でしょ。
ダイレクトにシェル変数に入れる方法か、
ファイルなどに吐き出しておく方法の方が安定。
まぁそれでも改行とか制御文字入れられるともにょる場合があるけどな。
いや、その方法でも結局 ' はエスケープが必要でしょ。
ダイレクトにシェル変数に入れる方法か、
ファイルなどに吐き出しておく方法の方が安定。
まぁそれでも改行とか制御文字入れられるともにょる場合があるけどな。
733デフォルトの名無しさん
2013/02/11(月) 20:15:01.17 そこまでめんどくさくなったらperlとかrubyとか使った方が楽だぞw
734デフォルトの名無しさん
2013/02/11(月) 22:46:25.57 何で gawk -f とか使わずワンライナーに拘るのかねぇ
735デフォルトの名無しさん
2013/02/12(火) 22:00:38.07736デフォルトの名無しさん
2013/03/11(月) 10:05:12.56 #
# text converter ( Mac to MS-DOS on Windos/MS-DOS machine)
# convert CR to CR+LF
#
BEGIN{ RS = "\r" }
{ print }
# text converter ( Mac to MS-DOS on Windos/MS-DOS machine)
# convert CR to CR+LF
#
BEGIN{ RS = "\r" }
{ print }
737デフォルトの名無しさん
2013/03/15(金) 08:05:25.28 #
# Line(行数)を数える
#
END { FNR }
# Line(行数)を数える
#
END { FNR }
738デフォルトの名無しさん
2013/03/20(水) 19:07:17.00 # 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>")
}
# 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>")
}
739UNIX(LF) to DOS(CR+LF) conversion
2013/03/21(木) 21:15:00.86 awk 1 infile1 > outfile2.txt
740デフォルトの名無しさん
2013/03/21(木) 22:10:08.07 # 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
}
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
}
741デフォルトの名無しさん
2013/03/21(木) 22:11:11.39 # >>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
}
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
}
742デフォルトの名無しさん
2013/03/21(木) 22:12:57.08 function produce_string(a, size, g, i) {
743grepをawkで
2013/03/22(金) 13:32:02.74 # usage: awk -f grep.awk char1 file1 file2
BEGIN{
pattern = ARGV[1]
ARGV[1] = ""
}
$0 ~ pattern {print($0" File name=" FILENAME)}
BEGIN{
pattern = ARGV[1]
ARGV[1] = ""
}
$0 ~ pattern {print($0" File name=" FILENAME)}
744デフォルトの名無しさん
2013/11/30(土) 12:16:25.95 $ echo 10 20 30 | awk '{for(i=0;i<4;)print _$++i}'
10
20
30
_$++iでも$++iでもどちらでもいけるのですが、アンダースコアが付いて何故大丈夫なのでしょうか?
10
20
30
_$++iでも$++iでもどちらでもいけるのですが、アンダースコアが付いて何故大丈夫なのでしょうか?
745デフォルトの名無しさん
2013/11/30(土) 16:04:55.55 すいません、わかりました
空の変数_と$++iの結果が一緒になってただけなんですね
空の変数_と$++iの結果が一緒になってただけなんですね
746デフォルトの名無しさん
2013/11/30(土) 20:37:58.81 単に式を並べると文字列連結になる、の罠か
747デフォルトの名無しさん
2014/04/02(水) 00:10:13.15ID:T3/5Epfc 保守
てか半年近く書き込みが無かったか
てか半年近く書き込みが無かったか
748デフォルトの名無しさん
2014/04/14(月) 22:41:42.89ID:5r697USd 4.1.1ってもうリリースされたの?
749デフォルトの名無しさん
2014/04/19(土) 13:45:38.45ID:Db2IzPol とあるgawkスクリプトの先頭で
{last_hoge=hoge; hoge=$ 3}
ってやってるんだけど、
hoge=$ 3はhoge=$3の間違い? それともこういう記法がある?
{last_hoge=hoge; hoge=$ 3}
ってやってるんだけど、
hoge=$ 3はhoge=$3の間違い? それともこういう記法がある?
750デフォルトの名無しさん
2014/04/19(土) 14:56:08.53ID:A73fEYrr >>749
$ は演算子だから、a=b+1をa = b + 1と書くようなものかな。
$ は演算子だから、a=b+1をa = b + 1と書くようなものかな。
751デフォルトの名無しさん
2014/04/19(土) 21:10:32.64ID:Db2IzPol ええー 演算子だったのかあ。衝撃の事実
752デフォルトの名無しさん
2014/04/20(日) 12:36:45.70ID:SQaIR8ej 演算子だから、変数でもいいよ。
753デフォルトの名無しさん
2014/04/20(日) 14:34:12.09ID:YSeiuWKu 式が書けるね。
$ は一番優先順位が高いから、かっこで括らにゃいかんが。
$ は一番優先順位が高いから、かっこで括らにゃいかんが。
754デフォルトの名無しさん
2014/04/20(日) 15:12:13.25ID:k3tDznaJ 今はじめて知った。haskellの$は演算子だって知ってたけど、awkでも演算子だったんだね。
755デフォルトの名無しさん
2014/10/14(火) 13:37:28.35ID:cBz5RbAX そして半年近く書き込みが無かった
756デフォルトの名無しさん
2014/10/15(水) 03:28:03.90ID:SS4U/DMU いやawkスレなんて普段はそんなに話題ないだろ
757デフォルトの名無しさん
2014/10/21(火) 15:46:10.36ID:TQsAGJgk 質問させてください
今ディレクトリ内のファイルの名称とサイズのリストを作りたいと思っています
コマンドとしてはls -lを実行していますがこれをさらにawkにパイプしています
ただしファイル名にスペースが含まれているため以下のような苦肉の策をとっておりますが
ls -l | awk '{print $5 "\t" $9$10$11$12$13$14$15$16$17$18$19}'
10個以上で区切られてる可能性もあるため根本的な対応をしたいと考えていますが
よい案はありますでしょうか
今ディレクトリ内のファイルの名称とサイズのリストを作りたいと思っています
コマンドとしてはls -lを実行していますがこれをさらにawkにパイプしています
ただしファイル名にスペースが含まれているため以下のような苦肉の策をとっておりますが
ls -l | awk '{print $5 "\t" $9$10$11$12$13$14$15$16$17$18$19}'
10個以上で区切られてる可能性もあるため根本的な対応をしたいと考えていますが
よい案はありますでしょうか
758デフォルトの名無しさん
2014/10/21(火) 17:25:55.68ID:EsuQiv22 # ファイル名に「"」が含まれていたら知らね。
ls -Ql |awk '{split($0, foo, "\x22"); print $5 "\t" foo[2]}'
ls -Ql |awk '{split($0, foo, "\x22"); print $5 "\t" foo[2]}'
759デフォルトの名無しさん
2014/10/21(火) 23:41:50.65ID:stXOK2Vv Qオプションは勉強になった
ls -l|awk '{s=$5;for(i=1;i<9;i++)$i="";print s"\t"$0}'
ls -l|awk '{s=$5;for(i=1;i<9;i++)$i="";print s"\t"$0}'
2014/12/13(土) 17:07:55.12ID:8LbgKkKk
¥034 は ” (半角)
¥035 は # (半角) でおkですか?
¥035 は # (半角) でおkですか?
2014/12/13(土) 18:17:16.35ID:FQOeA8KF
>>760
いいえ違います。
いいえ違います。
762デフォルトの名無しさん
2014/12/14(日) 00:00:31.34ID:7YfznIJB どちらも非可読文字ですね。そしてそうなるとスレ違い。
awkと絡むのなら具体的にどうぞ。
awkと絡むのなら具体的にどうぞ。
763デフォルトの名無しさん
2015/02/03(火) 10:36:52.13ID:Dvc0nyMp Terastationのファイル・ホルダ名に使うとファイルレプリケーションでエラーが起こる文字があって、それを変換するバッチを生成する時にこのマイナー言語が大活躍した。
約80万件のファイルホルダ名から抽出するのに10分程度だった。
約80万件のファイルホルダ名から抽出するのに10分程度だった。
764デフォルトの名無しさん
2015/05/26(火) 00:18:03.33ID:Y5HiR/XE Gawk4.1.2が出たなあ、と思ってたらすぐ4.1.3が出た。
素人には違いがあまり分からんのだが。
素人には違いがあまり分からんのだが。
765デフォルトの名無しさん
2015/05/31(日) 09:20:55.82ID:PB6Yeih1766デフォルトの名無しさん
2015/06/03(水) 20:45:34.22ID:vBAc8MUN >>765
買ってきた。まだ最初の方と最後の方を眺めただけだけど。
ページiv(「はじめに」)でawkの表記について「本書内では、いずれの
場合もすべて小文字のawkという表現に統一しております」と
あるのに、書名がAWK。
巻末のリファレンスで気になったところ。
演算子の優先順位に触れていない、フィールド演算子が
「特別な意味を持つな変数」の中に入れられている。
参考書や文献がないけど、今時は「ネットでググれ」かな。
買ってきた。まだ最初の方と最後の方を眺めただけだけど。
ページiv(「はじめに」)でawkの表記について「本書内では、いずれの
場合もすべて小文字のawkという表現に統一しております」と
あるのに、書名がAWK。
巻末のリファレンスで気になったところ。
演算子の優先順位に触れていない、フィールド演算子が
「特別な意味を持つな変数」の中に入れられている。
参考書や文献がないけど、今時は「ネットでググれ」かな。
767デフォルトの名無しさん
2015/07/06(月) 22:02:56.12ID:Wnwr3Nh9 Mono: Playback -9707 [5%] [-97.07dB] [on]
上の行からパーセントを除いた数字(上の例だと5)を取得したいのですがどのようにしたらよいでしょうか?
パーセントの値は0から100の整数だと思います
上の行からパーセントを除いた数字(上の例だと5)を取得したいのですがどのようにしたらよいでしょうか?
パーセントの値は0から100の整数だと思います
768デフォルトの名無しさん
2015/07/07(火) 15:47:02.78ID:NFKuqu84 # $0 に入っているとして
sub(/%.*/, "");
sub(/.*[^0-9]/, "");
sub(/%.*/, "");
sub(/.*[^0-9]/, "");
769デフォルトの名無しさん
2015/07/08(水) 11:55:27.32ID:rptAPQZX awk -F"[%[]" '{print $2}'
ではまずい?
ではまずい?
770デフォルトの名無しさん
2015/07/08(水) 18:52:19.39ID:GgkVcZ7j771デフォルトの名無しさん
2015/07/10(金) 10:45:11.15ID:VcZTZ3UB テンプレである筈の1が読めないんだが、このスレ的にはPOSIXで書くのが
正統?普段はGawkしか使わないので一応確認。
正統?普段はGawkしか使わないので一応確認。
772デフォルトの名無しさん
2015/10/10(土) 22:36:33.12ID:1AEUTcmG awk の a は、aho の a
ただし、エイホと読むらしい
へぇーーーーー
ただし、エイホと読むらしい
へぇーーーーー
773デフォルトの名無しさん
2016/02/12(金) 17:12:05.45ID:VH2jVHwT awk使ってるシェルスクリプト見ると逃げてるなあと思う
774デフォルトの名無しさん
2016/02/18(木) 00:13:16.92ID:E3KgV2Kz 普通は x[3]=5 と書くが、=なしの
x[3]
だけでもエラーとならず、x を配列として確保し、length(x)=1 になるのを発見
まあ、あまり必要ないけど
x[3]
だけでもエラーとならず、x を配列として確保し、length(x)=1 になるのを発見
まあ、あまり必要ないけど
775デフォルトの名無しさん
2016/02/18(木) 23:58:18.64ID:kHIvdCfG まあ、gawkのマニュアルでも代入の前に参照が出てくるし
776デフォルトの名無しさん
2016/02/20(土) 00:57:58.12ID:OTE8dQpJ そうでしたか、新発見でなかった
777デフォルトの名無しさん
2016/02/20(土) 15:01:09.40ID:91Q+YYwH 代入前にうっかり参照してしまうのは稀に良くある。
778デフォルトの名無しさん
2016/02/28(日) 01:02:06.47ID:Atbyv4Wk IGNORECASE=1
をBEGIN の前に置いてもエラーにならず、不可解動作
セキュリティ的にやばくないの
をBEGIN の前に置いてもエラーにならず、不可解動作
セキュリティ的にやばくないの
779デフォルトの名無しさん
2016/02/28(日) 02:01:41.85ID:2mMmSiU+ >>778
BEGIN セクションを先頭に書けとは何処にも書いてない。
BEGIN を最後に書いても END を最初に書いても問題は無い。
何処に書いても、実際には先頭行読み込み前、各行読み込み時、最終行読み込み後にそれぞれ
パターンマッチが行われている。
ただマッチする条件が特殊だから、先頭か最後でしか中の文が実行されないだけ。
BEGIN セクションを先頭に書けとは何処にも書いてない。
BEGIN を最後に書いても END を最初に書いても問題は無い。
何処に書いても、実際には先頭行読み込み前、各行読み込み時、最終行読み込み後にそれぞれ
パターンマッチが行われている。
ただマッチする条件が特殊だから、先頭か最後でしか中の文が実行されないだけ。
780デフォルトの名無しさん
2016/03/29(火) 09:03:58.15ID:/c8bAcK4 サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
781awk命
2016/05/10(火) 10:11:56.15ID:qP72K9YB mawk32.exeで「multibyte char」のメッセージがでて困ってます、何が原因でしょう?
抑止する方法はありますか?
multibyte指定のコマンドラインオプションは無いようなのですが?
抑止する方法はありますか?
multibyte指定のコマンドラインオプションは無いようなのですが?
782デフォルトの名無しさん
2016/05/10(火) 13:22:33.71ID:pT7b4QGj UTF-8 が使えないのかも
「mawk multibyte char」で検索!
「mawk multibyte char」で検索!
783awk命
2016/05/11(水) 00:10:08.64ID:EkexSAUH >782
データもプログラムもSJISです。
何に反応して multibyte charが出続けるのか不明です。
gawk高速なので満足なのですが、STDERRに multibyte charがで続けるのでうざいし、この出力ぶんだけ速度も低下?
データもプログラムもSJISです。
何に反応して multibyte charが出続けるのか不明です。
gawk高速なので満足なのですが、STDERRに multibyte charがで続けるのでうざいし、この出力ぶんだけ速度も低下?
784デフォルトの名無しさん
2016/05/11(水) 00:13:30.76ID:Qn6YFszJ 入力にSJISでない文字が混在していることない?
nkf -s 入力ファイル | awk
で変換したら
nkf -s 入力ファイル | awk
で変換したら
785デフォルトの名無しさん
2016/05/11(水) 03:47:08.47ID:6KznZIvs コードを教えて下さい。
チャレンジしましたが、これではダメです。。
(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
▼やりたい変換後の行列イメージ
3 15 6 1
0 4 0 2
8 9 0 11
チャレンジしましたが、これではダメです。。
(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
▼やりたい変換後の行列イメージ
3 15 6 1
0 4 0 2
8 9 0 11
786デフォルトの名無しさん
2016/05/11(水) 04:14:37.49ID:gi9ycYMA 構文がぜんぜん駄目。
{for(i=1;i<=NF;i++)if($i<0){$i=0};print $0;}
「したいことは、〜したいです。」の構文も駄目。典型的なねじれ文。
{for(i=1;i<=NF;i++)if($i<0){$i=0};print $0;}
「したいことは、〜したいです。」の構文も駄目。典型的なねじれ文。
787デフォルトの名無しさん
2016/05/11(水) 07:39:07.59ID:E3fj3Ww+ Ruby, Python などを使えば?
788デフォルトの名無しさん
2016/05/11(水) 12:31:52.37ID:ZhRn3EDd >>787
Ruby, Python スクリプトを提示してみろよ。
Ruby, Python スクリプトを提示してみろよ。
789デフォルトの名無しさん
2016/05/11(水) 22:58:11.78ID:Lckmn9CP790デフォルトの名無しさん
2016/05/13(金) 01:56:22.83ID:VtzDMLxe awk じゃなくてもいいんなら
$ sed 's/-[0-9][0-9]*/0/g' ...
GNU sed なら
$ sed -r 's/-[0-9]+/0/g' ...
でええんちゃう?
$ sed 's/-[0-9][0-9]*/0/g' ...
GNU sed なら
$ sed -r 's/-[0-9]+/0/g' ...
でええんちゃう?
791デフォルトの名無しさん
2016/06/22(水) 00:21:13.08ID:X+fwM1CQ かまぷ 「『シェル芸』に効く AWK処方箋」
エイホ先生「AWKって使い捨ての言語(中略)プラスアルファの処理がやりたいよね。
ただその処理はとても簡単な処理でいい。そこに対して新しいプログラム言語を作っていきたい」
AWKブーム第1世代は「アイドル辞書」で学んだ――日本GNU AWKユーザー会 斉藤さん (1/5):CodeZine(コードジン)
http://codezine.jp/article/detail/9478
2016/06/15 14:00
エイホ先生「AWKって使い捨ての言語(中略)プラスアルファの処理がやりたいよね。
ただその処理はとても簡単な処理でいい。そこに対して新しいプログラム言語を作っていきたい」
AWKブーム第1世代は「アイドル辞書」で学んだ――日本GNU AWKユーザー会 斉藤さん (1/5):CodeZine(コードジン)
http://codezine.jp/article/detail/9478
2016/06/15 14:00
792デフォルトの名無しさん
2016/06/22(水) 23:46:54.12ID:P+7nG182 やたらと続きは登録して読めと言われてもなあ。
このスレが立った頃からJGAUCのHPが更新されていないってのも凄い。
このスレが立った頃からJGAUCのHPが更新されていないってのも凄い。
793デフォルトの名無しさん
2016/08/27(土) 09:20:46.26ID:2q8s4uQl Windows版のgawkで遊んでたら
for (i=0; i<n; i++) より
for (i=0; i<n; i+=1) のほうが
実行時間が短くなることに気づいた
なんだこりゃ
for (i=0; i<n; i++) より
for (i=0; i<n; i+=1) のほうが
実行時間が短くなることに気づいた
なんだこりゃ
794デフォルトの名無しさん
2016/09/13(火) 23:56:36.77ID:mfLTwPLq for(i=1;i<=1000000;i++){a[i]=1}
と
for(i=1;i<=1000000;i++){a[i]=sprintf("1")}
結果は同じはずなのに、後者は異常にメモリを食う!ふしぎ!
と
for(i=1;i<=1000000;i++){a[i]=sprintf("1")}
結果は同じはずなのに、後者は異常にメモリを食う!ふしぎ!
795デフォルトの名無しさん
2016/09/14(水) 00:22:19.58ID:YCeX8Gov 同じじゃないぞ。数値と文字列だ。
ところで、君が使ってる 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
ところで、君が使ってる 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
796デフォルトの名無しさん
2016/09/14(水) 22:01:59.31ID:DqYC5LBT >>795
例が悪くてスマソ、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版の問題かも
例が悪くてスマソ、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版の問題かも
797デフォルトの名無しさん
2016/09/14(水) 22:50:10.30ID:PWB0Awgu798795
2016/09/14(水) 23:40:38.22ID:YCeX8Gov やってみたよ。環境は 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" に変更してもこんな感じだから数値と文字列の差というわけではなさそう。
テストプログラム
#!/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" に変更してもこんな感じだから数値と文字列の差というわけではなさそう。
799デフォルトの名無しさん
2016/09/14(水) 23:49:14.48ID:YCeX8Gov ごめん、書き忘れた。
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
Copyright (C) 1989, 1991-2014 Free Software Foundation.
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
Copyright (C) 1989, 1991-2014 Free Software Foundation.
800デフォルトの名無しさん
2016/09/17(土) 08:30:37.61ID:didBD5ba よく考えたら、メモリの使用量自体じゃなくて、それがどれだけ増えたかが重要だね。
そして、連想配列の構造体とキーに必要な量はどのケースでも同じと考えられる。
つまり、連想配列の要素のための量がどれだけ違うかを直接知ることができるはず。
というわけで、もう一回テスト。
https://ideone.com/mRuFj7
そして、連想配列の構造体とキーに必要な量はどのケースでも同じと考えられる。
つまり、連想配列の要素のための量がどれだけ違うかを直接知ることができるはず。
というわけで、もう一回テスト。
https://ideone.com/mRuFj7
801デフォルトの名無しさん
2016/09/17(土) 08:32:42.20ID:didBD5ba 実行結果
element before after diff
1 5685 7691 2006
i 5685 29226 23541
sprintf("%d",i) 5685 158124 152439
sprintf("%d",i) + 0 5685 29221 23536
sprintf("%d",i) "" 5685 37026 31341
1000000 要素の配列で 2MB って、いったいどうやってるんだろう。少なすぎる。
sprintf("%d",i) が突出して多いのは sprintf で多めに確保して
切り詰めたりせずにそのまま使ってるのだろうか。
さあ、gawk のソースコードをハックしてみるか!
element before after diff
1 5685 7691 2006
i 5685 29226 23541
sprintf("%d",i) 5685 158124 152439
sprintf("%d",i) + 0 5685 29221 23536
sprintf("%d",i) "" 5685 37026 31341
1000000 要素の配列で 2MB って、いったいどうやってるんだろう。少なすぎる。
sprintf("%d",i) が突出して多いのは sprintf で多めに確保して
切り詰めたりせずにそのまま使ってるのだろうか。
さあ、gawk のソースコードをハックしてみるか!
802デフォルトの名無しさん
2016/09/17(土) 14:11:27.89ID:IIH0ZjSk 推測だけど、stream, yield, callback、遅延処理かも
データをバッファサイズ分だけ読み込んで処理して、
次のコマンドへ送ったら、それを捨てて、次のデータを読み込むのかも
この方式だとメモリは、バッファサイズ分だけしか使わない
データをバッファサイズ分だけ読み込んで処理して、
次のコマンドへ送ったら、それを捨てて、次のデータを読み込むのかも
この方式だとメモリは、バッファサイズ分だけしか使わない
803デフォルトの名無しさん
2016/09/18(日) 10:41:36.96ID:6jI6cHER ベクターに公開されてるgawk3.1.5(と非公開の3.1.7)、ヘンテコな処理が見つかったのでメモ
このgawkのsystem関数を実行すると、環境変数TMPが指してるフォルダに
@echo off
system関数の引数
という2行が書かれたバッチファイルpip?.bat(?はsystem実行回数+1)というのが作成され
このgawkのsystem関数を実行すると、環境変数TMPが指してるフォルダに
@echo off
system関数の引数
という2行が書かれたバッチファイルpip?.bat(?はsystem実行回数+1)というのが作成され
804デフォルトの名無しさん
2016/09/18(日) 10:44:42.56ID:6jI6cHER ・・・いっぺんに書こうとしたらハネられるorz
805803
2016/09/18(日) 10:46:32.08ID:6jI6cHER (続き)
それを/c pip?.batで起動、完了後にpip?.batを
削除という流れでコマンドが実行される
それを/c pip?.batで起動、完了後にpip?.batを
削除という流れでコマンドが実行される
806803
2016/09/18(日) 10:47:07.98ID:6jI6cHER (続き)
system関数を使ったスクリプトを同時に1つしか実行しないなら良いけど
2つ以上実行したときはタイミング次第でpip?.batの数字がぶつかり、先に実行した側が
・ コマンドが実行されない
・ コマンドが実行されるけど、完了後に「バッチファイルが見つかりません」が吐かれる
という結果になる
予めcmdの窓ごとにTMPを変えておけば問題ないけど面倒くさい
コマンド | getlineで起動したほうが手っ取り早いと思う
(ただし出力が2KBytes溜まると止まるから適宜リダイレクトする)
でも何でこんな方法でsystem関数を実装したんだろうね(´・ω・`)
system関数を使ったスクリプトを同時に1つしか実行しないなら良いけど
2つ以上実行したときはタイミング次第でpip?.batの数字がぶつかり、先に実行した側が
・ コマンドが実行されない
・ コマンドが実行されるけど、完了後に「バッチファイルが見つかりません」が吐かれる
という結果になる
予めcmdの窓ごとにTMPを変えておけば問題ないけど面倒くさい
コマンド | getlineで起動したほうが手っ取り早いと思う
(ただし出力が2KBytes溜まると止まるから適宜リダイレクトする)
でも何でこんな方法でsystem関数を実装したんだろうね(´・ω・`)
807デフォルトの名無しさん
2016/09/18(日) 13:53:41.51ID:EIh/dcA1 tmpfile を使えば、他と重複しない、ランダムな名前のファイルを作れるのに、
どうして使わないのだろう?
どうして使わないのだろう?
808デフォルトの名無しさん
2016/09/18(日) 14:54:02.97ID:KtcAr9oX MS-DOS ではね、コマンドラインの長さの制限が厳しかったんだよ。驚くなかれ、たった 128 バイトだ。
そんな環境では、バッチファイルにすれば実行できるけど
command /c "prog arg1 arg2 ..."
では command /c のせいで制限を越えるということもあるだろう。つまり、そういうことだ。
………冗談だ。確かにそういう制限はあったけど。
現在はもう system 関数ではそういうことをしていないということが ChangeLog に書かれてるよ。
2014-01-15 Eli Zaretskii <eliz@gnu.org>
* popen.c (os_system): Use spawnl, and quote the command line, to be consistent with what gawk_popen does.
(os_popen) [__MINGW32__]: Don't scriptify the command, to be consistent with gawk_popen.
(os_pclose) [__MINGW32__]: Update to match os_open: no need to unlink the script file.
そんな環境では、バッチファイルにすれば実行できるけど
command /c "prog arg1 arg2 ..."
では command /c のせいで制限を越えるということもあるだろう。つまり、そういうことだ。
………冗談だ。確かにそういう制限はあったけど。
現在はもう system 関数ではそういうことをしていないということが ChangeLog に書かれてるよ。
2014-01-15 Eli Zaretskii <eliz@gnu.org>
* popen.c (os_system): Use spawnl, and quote the command line, to be consistent with what gawk_popen does.
(os_popen) [__MINGW32__]: Don't scriptify the command, to be consistent with gawk_popen.
(os_pclose) [__MINGW32__]: Update to match os_open: no need to unlink the script file.
809デフォルトの名無しさん
2016/09/18(日) 15:07:54.47ID:KtcAr9oX でもソースコードを見るかぎり、パイプではそういうことをしてるみたいなんだけど……
ちょっと試してみてくれないかな。
system("dir") | getline
みたいな感じ? よく知らないけど。
ちょっと試してみてくれないかな。
system("dir") | getline
みたいな感じ? よく知らないけど。
810803
2016/09/18(日) 16:19:12.82ID:6jI6cHER コマンド | getline で起動する場合はpip?.batは作られませんでした
system関数だけpip?.bat経由の模様
klabaster版のwindows用gawk4.1.3だとsystem関数がpip?.batを
作らなかったから、ベクター版固有の動きかなあと思います
system関数だけpip?.bat経由の模様
klabaster版のwindows用gawk4.1.3だとsystem関数がpip?.batを
作らなかったから、ベクター版固有の動きかなあと思います
811デフォルトの名無しさん
2016/09/18(日) 17:46:00.36ID:KtcAr9oX ありがとうございます。
gawk-4.1.1 の pc/popen.c を見た限りでは gawk の system 関数でバッチファイルを作るのは MINGW 限定で、
ChangeLog には問題が解消されたから直接 spawnl で実行するようにしたと書かれているわけですが
gawk のパイプ処理を実行している(と思われる) os_popen 関数ではバッチファイルを作るときと同様に
tempnam 関数でファイル名を作った上で、そのファイルを経由して受け渡しをしているように見えます。
これは MS-DOS の時代から使われてるやり方で、パイプのように見えてもパイプではありません。
このやり方だと gawk で
while (( command | getline) > 0)
と書いても実質的には
system("command > filename"); while (( getline < "filename") > 0)
と同じことになります。
あくまでも 4.1.1 の pc/popen.c の os_popen 関数がそう見えるというだけで、実際には違うかもしれませんが
自分で試すことができません。そもそも 3.1.5 のソースコードってどこにあるの?
もし勘違いじゃないなら >>806 と同じ問題が起こりそうな気が……
Linux を使ってる自分には関係ないといってしまえばそれまでですが。
gawk-4.1.1 の pc/popen.c を見た限りでは gawk の system 関数でバッチファイルを作るのは MINGW 限定で、
ChangeLog には問題が解消されたから直接 spawnl で実行するようにしたと書かれているわけですが
gawk のパイプ処理を実行している(と思われる) os_popen 関数ではバッチファイルを作るときと同様に
tempnam 関数でファイル名を作った上で、そのファイルを経由して受け渡しをしているように見えます。
これは MS-DOS の時代から使われてるやり方で、パイプのように見えてもパイプではありません。
このやり方だと gawk で
while (( command | getline) > 0)
と書いても実質的には
system("command > filename"); while (( getline < "filename") > 0)
と同じことになります。
あくまでも 4.1.1 の pc/popen.c の os_popen 関数がそう見えるというだけで、実際には違うかもしれませんが
自分で試すことができません。そもそも 3.1.5 のソースコードってどこにあるの?
もし勘違いじゃないなら >>806 と同じ問題が起こりそうな気が……
Linux を使ってる自分には関係ないといってしまえばそれまでですが。
812デフォルトの名無しさん
2016/09/18(日) 19:56:17.75ID:zTPoEkjL >>811
vectorの配布ファイル内のreadmeにはソースコードの
公開場所を探してるとか、直接連絡すれば渡すとか書いてある。
Windows版、NTあたりから一時ファイル作らずにパイプ動作するように
なったとか、どこかで読んだ気がするけど。
vectorの配布ファイル内のreadmeにはソースコードの
公開場所を探してるとか、直接連絡すれば渡すとか書いてある。
Windows版、NTあたりから一時ファイル作らずにパイプ動作するように
なったとか、どこかで読んだ気がするけど。
813デフォルトの名無しさん
2016/09/18(日) 22:03:20.37ID:KtcAr9oX 謎は解けた。
ファイルを使ってデータを渡すのはマクロ __DJGPP__ とマクロ __MINGW32__ が
いずれも定義されていない場合らしいです。
Vector のは MINGW なので該当しません。お騒がせしました。
ファイルを使ってデータを渡すのはマクロ __DJGPP__ とマクロ __MINGW32__ が
いずれも定義されていない場合らしいです。
Vector のは MINGW なので該当しません。お騒がせしました。
814デフォルトの名無しさん
2016/09/19(月) 11:56:06.00ID:iIvzjj/t ファイルを経由していても、ストレージに書き込むとは限らない
メモリ上だけに存在する、ファイルもあり得る。
LinuxのRAMディスク、tmpfs とか
メモリ上だけに存在する、ファイルもあり得る。
LinuxのRAMディスク、tmpfs とか
815803
2016/09/19(月) 14:26:19.66ID:fDWhtT6v816デフォルトの名無しさん
2016/09/20(火) 17:00:26.41ID:RIxgZ1yj 先日アクセスできなかった GNU のサイトが復活してたので 3.1.5 のソースコードを入手できました。
やっぱり os_popen からも scriptify を呼んでたみたいですね。4.1.1 のソースコードじゃ判りませんでした。
一応 chdir はアトミックな処理のはずなのでリスク回避に役立つと思いますよ。それ以外に方法がなければ。
chdir したら rmdir も忘れずに。
やっぱり os_popen からも scriptify を呼んでたみたいですね。4.1.1 のソースコードじゃ判りませんでした。
一応 chdir はアトミックな処理のはずなのでリスク回避に役立つと思いますよ。それ以外に方法がなければ。
chdir したら rmdir も忘れずに。
817デフォルトの名無しさん
2016/09/20(火) 17:06:03.57ID:RIxgZ1yj 間違えた。chdir じゃなくて mkdir です。
818デフォルトの名無しさん
2016/09/22(木) 12:11:24.09ID:nnsRF/zz >>794
どうやら >>801 で想像した通り sprintf の仕様らしい。
本体は builtin.c の format_tree 関数らしい。
最初に 512 バイト確保したバッファは大きくはなっても小さくはならない。
実際の文字列に合わせて確保しなおしたらどうなるか >>800 のテストをしてみたよ。
改造前
element before after diff
1 2753 4757 2004
i 2753 22357 19604
sprintf("%d",i) 2753 151283 148530
sprintf("%d",i) + 0 2753 22376 19623
sprintf("%d",i) "" 2753 30174 27421
改造後
element before after diff
1 2753 4757 2004
i 2753 22357 19604
sprintf("%d",i) 2753 30174 27421
sprintf("%d",i) + 0 2753 22373 19620
sprintf("%d",i) "" 2753 30230 27477
あれ? jessie の gawk と比べてメモリの使用量が少ない。
-DDEBUG 付きでコンパイルしたから増えるかと思ったのに。
まあ、それ以外は一応予想通りではある。
どうやら >>801 で想像した通り sprintf の仕様らしい。
本体は builtin.c の format_tree 関数らしい。
最初に 512 バイト確保したバッファは大きくはなっても小さくはならない。
実際の文字列に合わせて確保しなおしたらどうなるか >>800 のテストをしてみたよ。
改造前
element before after diff
1 2753 4757 2004
i 2753 22357 19604
sprintf("%d",i) 2753 151283 148530
sprintf("%d",i) + 0 2753 22376 19623
sprintf("%d",i) "" 2753 30174 27421
改造後
element before after diff
1 2753 4757 2004
i 2753 22357 19604
sprintf("%d",i) 2753 30174 27421
sprintf("%d",i) + 0 2753 22373 19620
sprintf("%d",i) "" 2753 30230 27477
あれ? jessie の gawk と比べてメモリの使用量が少ない。
-DDEBUG 付きでコンパイルしたから増えるかと思ったのに。
まあ、それ以外は一応予想通りではある。
819デフォルトの名無しさん
2016/09/22(木) 23:15:31.17ID:SYBS8P/o820デフォルトの名無しさん
2016/09/23(金) 02:39:22.63ID:o4qLonoN821デフォルトの名無しさん
2016/09/23(金) 16:06:39.19ID:Y+5MXC/e そんなバカな……と思ってやってみた。
https://ideone.com/jIYn2p
jessie 用のパッケージによる実行結果。
i++ 6.15614
i = i + 1 6.02501
cat " and " dog 13.0163
sprintf 19.1612
インクリメントと足し算の差は有意とは思えない。
連結と sprintf の差は多分、倍くらい。
sprintf の中の複雑さを考えれば意外と差は小さいといえる。
フォーマット文字列が定数なら正規表現みたいにコンパイルすれば
高速化できる……のかなあ? 自分でやってみようとは(今はまだ)思わない。
https://ideone.com/jIYn2p
jessie 用のパッケージによる実行結果。
i++ 6.15614
i = i + 1 6.02501
cat " and " dog 13.0163
sprintf 19.1612
インクリメントと足し算の差は有意とは思えない。
連結と sprintf の差は多分、倍くらい。
sprintf の中の複雑さを考えれば意外と差は小さいといえる。
フォーマット文字列が定数なら正規表現みたいにコンパイルすれば
高速化できる……のかなあ? 自分でやってみようとは(今はまだ)思わない。
822デフォルトの名無しさん
2016/09/24(土) 23:15:47.76ID:+IiHRmp0 Windowsで使えるawkでUnicodeを正しく処理できる(length("あいう")で3が返ってくる)ものは
Cygwin版とVector版以外に無いでしょうか?
Cygwin版とVector版以外に無いでしょうか?
823デフォルトの名無しさん
2016/09/25(日) 10:08:34.07ID:BH82R274 何があったんですか?
http://tanimoto.to/nlp/jgawk/jgawk.html
に書かれているようなことですか? 別の選択肢も一応あるみたいですが。
トランスレータでもいいなら Perl に a2p が同梱されてます。
http://tanimoto.to/nlp/jgawk/jgawk.html
に書かれているようなことですか? 別の選択肢も一応あるみたいですが。
トランスレータでもいいなら Perl に a2p が同梱されてます。
824822
2016/09/25(日) 14:28:36.60ID:MNlfsMjx 特に困りごとは無いのですが、最新のVer4.1.4やその近辺のバージョンで
Unicodeが正しく処理できるものがあれば、今使っているBruce版3.1.7から
乗り換えたいなあと思いまして。
↓の5年前に書かれた記事の頃より選択肢が増えたりしてたら嬉しいなと・・・。
http://blog.livedoor.jp/corbie/archives/3924154.html
Unicodeが正しく処理できるものがあれば、今使っているBruce版3.1.7から
乗り換えたいなあと思いまして。
↓の5年前に書かれた記事の頃より選択肢が増えたりしてたら嬉しいなと・・・。
http://blog.livedoor.jp/corbie/archives/3924154.html
825823
2016/09/26(月) 09:17:05.22ID:bhAuZr+w 理解しました。全滅だったんですね。
Windows での事情は存じませんが、こちらでも取り急ぎ gawk 3.1.5 を make してみました。
ところで、そのページのテスト3は不十分です。
UTF-8 でのパターンマッチは通常文字の誤マッチは原理的に起こりません。起こったらバグです。
だから、UTF-8 に対応しているかどうかをテストするために
sub(/.う/, "U")
というようなものを入れて試してみました。
今ビルドしたばかりの gawk 3.1.5 と jessie のパッケージの gawk 4.1.1 がこのテストに合格しました。
mawk 1.3.3 もインストールされてましたが、こちらはマルチバイト文字に対応していないようです。
さて、結論です。
シフトJIS に対応しているとされるものは避けた方がいいと思います。
余計な改造はしない方が信頼性は高いでしょう。
length がバイト数なのは、単にマルチバイト文字非対応でコンパイルされてるからだと思います。
マルチバイト文字対応版を誰かがリリースしてくれるのを待つか、自分でコンパイルするかですね。
Windows での事情は存じませんが、こちらでも取り急ぎ gawk 3.1.5 を make してみました。
ところで、そのページのテスト3は不十分です。
UTF-8 でのパターンマッチは通常文字の誤マッチは原理的に起こりません。起こったらバグです。
だから、UTF-8 に対応しているかどうかをテストするために
sub(/.う/, "U")
というようなものを入れて試してみました。
今ビルドしたばかりの gawk 3.1.5 と jessie のパッケージの gawk 4.1.1 がこのテストに合格しました。
mawk 1.3.3 もインストールされてましたが、こちらはマルチバイト文字に対応していないようです。
さて、結論です。
シフトJIS に対応しているとされるものは避けた方がいいと思います。
余計な改造はしない方が信頼性は高いでしょう。
length がバイト数なのは、単にマルチバイト文字非対応でコンパイルされてるからだと思います。
マルチバイト文字対応版を誰かがリリースしてくれるのを待つか、自分でコンパイルするかですね。
826デフォルトの名無しさん
2016/09/27(火) 17:33:47.16ID:Icjzq3KF Linux では環境変数 LANG に UTF-8 が入ってないと期待通りに動いてくれません。
正確には LANG というより LC_CTYPE ですが、それはおいといて。
もしかしたらと思って、自分には無用だと思ってた Wine で klabaster gawk 4.1.3 を動かしてみました。
ところが、正規表現にマルチバイト文字が現れた時点で怒られます。
どうやら LANG が無いか、LANG=C じゃなければマルチバイト文字を使えないようです。
そして結局、正規表現の . や length を UTF-8 モードにする方法は見つけられませんでした。
記事のコメントには LC_ALL=ja_JP.UTF-8 で動くって書いてあるのに。
ひょっとして、Windows では原理的にできないということ?
これはいよいよ a2p が現実的な選択肢か?
……と思ったら、出力する Perl コードが間違ってます。
もう降参です。UTF-8 対応の gawk をお望みの方には Linux への引越しを強くお奨めします。
正確には LANG というより LC_CTYPE ですが、それはおいといて。
もしかしたらと思って、自分には無用だと思ってた Wine で klabaster gawk 4.1.3 を動かしてみました。
ところが、正規表現にマルチバイト文字が現れた時点で怒られます。
どうやら LANG が無いか、LANG=C じゃなければマルチバイト文字を使えないようです。
そして結局、正規表現の . や length を UTF-8 モードにする方法は見つけられませんでした。
記事のコメントには LC_ALL=ja_JP.UTF-8 で動くって書いてあるのに。
ひょっとして、Windows では原理的にできないということ?
これはいよいよ a2p が現実的な選択肢か?
……と思ったら、出力する Perl コードが間違ってます。
もう降参です。UTF-8 対応の gawk をお望みの方には Linux への引越しを強くお奨めします。
827デフォルトの名無しさん
2016/09/27(火) 18:24:36.25ID:JiNhKH2a cygwinやmsys2のgawkを使うのはだめなの?
828デフォルトの名無しさん
2016/09/27(火) 18:34:39.64ID:BPXrtVfk Windows Subsystem for Linux (WSL)では、Ubuntu64の実行ファイルが動く。
Linux API を、Windows API へ変換して呼び出す
Ubuntuのパッケージも、apt-getでインストールできる
Linux API を、Windows API へ変換して呼び出す
Ubuntuのパッケージも、apt-getでインストールできる
829デフォルトの名無しさん
2016/09/27(火) 19:26:43.05ID:Icjzq3KF だめというか、見つけられなかった。
ただでさえ Windows のことなんか知らないんだからこれ以上無理。
いい方法を知ってたら教えてあげて。
ただでさえ Windows のことなんか知らないんだからこれ以上無理。
いい方法を知ってたら教えてあげて。
830デフォルトの名無しさん
2016/09/27(火) 19:51:11.26ID:Icjzq3KF Cygwin は試してみたけどインストーラに丁重にお断りされたよ。
831822
2016/09/27(火) 23:10:22.59ID:eGFFwbsN たくさんの情報ありがとうございます。現状でWindowsに拘るなら、Bruce版3.1.7を継続して
使用するか、Cygwin版に乗り換えるか、Windows Subsystem for Linuxで動作させるかの
いずれかになりそうですね。
CygwinやWindows7でのWindows Subsystem for Linuxは、どちらも別途インストールが必要
とのことなので、職場の自PCはともかくスクリプト配布先に(スクリプトを動かすためだけに)
導入してもらわないといけないのはちょっと難しそうです。
Cygwinの導入状況とWindows10への切り替え時期の様子を見つつ、しばらくBruce版3.1.7を
使うことにします。
使用するか、Cygwin版に乗り換えるか、Windows Subsystem for Linuxで動作させるかの
いずれかになりそうですね。
CygwinやWindows7でのWindows Subsystem for Linuxは、どちらも別途インストールが必要
とのことなので、職場の自PCはともかくスクリプト配布先に(スクリプトを動かすためだけに)
導入してもらわないといけないのはちょっと難しそうです。
Cygwinの導入状況とWindows10への切り替え時期の様子を見つつ、しばらくBruce版3.1.7を
使うことにします。
832デフォルトの名無しさん
2016/09/28(水) 07:26:06.87ID:6NcLFLen 実は方法が無いわけではない。シングルバイトモードならできる。でも本当にやりたい?
本当に真剣に必要としているなら、このスクリプトでテスト3をやってみてほしい。
{
c = "[\\000-\\177]|[\\340-\\357][\\200-\\277][\\200-\\277]"
# print( length($0));
str = $0; print( gsub( c,"0",str));
print;
sub(/<tag>/, "");
sub(/<\/tag>/, "");
sub(/hello/, "ABC");
# sub(/.う/, "U");
sub( sprintf("(%s)う",c),"U")
print;
}
本当に真剣に必要としているなら、このスクリプトでテスト3をやってみてほしい。
{
c = "[\\000-\\177]|[\\340-\\357][\\200-\\277][\\200-\\277]"
# print( length($0));
str = $0; print( gsub( c,"0",str));
print;
sub(/<tag>/, "");
sub(/<\/tag>/, "");
sub(/hello/, "ABC");
# sub(/.う/, "U");
sub( sprintf("(%s)う",c),"U")
print;
}
833デフォルトの名無しさん
2016/10/01(土) 22:37:26.49ID:apxhHWta やっぱり klabaster gawk はよく解らない。
$cat u2.awk
{
print( length($0))
sub(/う/, "U")
print;
}
$LANG=C wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
$LANG=ja_JP.EUC-JP wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
$LANG=ja_JP.UTF-8 wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
gawk64: u2.awk:3: sub(//, "U")
gawk64: u2.awk:3: ^ unterminated regexp
gawk64: u2.awk:4: sub(//, "U")
gawk64: u2.awk:4: ^ unexpected newline or end of string
$
UTF-8 で「う」は 3 バイトだから、シフトJISで解釈した結果
その後ろの / もマルチバイト文字の一部になるのだろうか。
いや、UTF-8 で解釈してくれないことに文句を言いたいんじゃないんだ。
UTF-8 で書いてあるのになぜ LANG=ja_JP.UTF-8 の時だけエラーになるのだろう。
$cat u2.awk
{
print( length($0))
sub(/う/, "U")
print;
}
$LANG=C wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
$LANG=ja_JP.EUC-JP wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
$LANG=ja_JP.UTF-8 wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
gawk64: u2.awk:3: sub(//, "U")
gawk64: u2.awk:3: ^ unterminated regexp
gawk64: u2.awk:4: sub(//, "U")
gawk64: u2.awk:4: ^ unexpected newline or end of string
$
UTF-8 で「う」は 3 バイトだから、シフトJISで解釈した結果
その後ろの / もマルチバイト文字の一部になるのだろうか。
いや、UTF-8 で解釈してくれないことに文句を言いたいんじゃないんだ。
UTF-8 で書いてあるのになぜ LANG=ja_JP.UTF-8 の時だけエラーになるのだろう。
834デフォルトの名無しさん
2016/10/02(日) 00:14:27.80ID:lSw/Qfuv この記事を見るかぎりではklabaster以外のWindows版gawkでもダメっぽいです
https://groups.google.com/forum/#!topic/comp.lang.awk/coXxXOpeoXU
https://groups.google.com/forum/#!topic/comp.lang.awk/coXxXOpeoXU
835デフォルトの名無しさん
2016/10/08(土) 21:51:54.06ID:66+5bUgM >>749からのレスで、$が演算子だったの? というようなところが気になって
少し調べてみた(調べたというほどの作業はしてないか)。
まず書籍。手持ちの数冊で確認。
『プログラミング言語AWK』(トッパン 初版第7刷)
さいごのまとめで演算子一覧に記載。本文中(p8)では「欄は常に$1,$2のように
参照しなくてはいけないと思われているかもしれないが、実は$のあとには,欄の
番号を指し示すための任意の式を書いてもよい」と書かれている。また、p46には
「欄変数」の項に「入力行の欄(field)は,$1,$2から始まって,$NFという名で呼ばれる」
との記述がある。
『sed & awk プログラミング』(アスキー出版局 初版)
旧版。本文中(p212)で「フィールドを参照したいときには、フィールド演算子$を使えばよい」
また(p217)で「フィールドを参照するにはドル記号($)演算子を使う」、Appendix(p471)で
「それぞれのフィールドは、$1ならば最初のフィールドの値を参照し、」と表現されている。
Appendixの演算子一覧に記載。
『AWKを256倍使うための本』(アスキー出版局 初版)
Appendixで演算子一覧に記載されているが、本文(p65)で「分解された各フィールドは、
$nという変数(nは、始めのフィールドから順に1,2,3...となる。もちろん即値の代わりに変数を
指定することも可能だ)でアクセスすることができる」とある。他の箇所でも$n変数と書いてある
ところがある。p66で「各フィールドを表す$nであるが、なぜこんな名前になっているかご存じだろうか?
実はこれもUNIX文化からきているのだ。UNIXの代表的なシェルであるshやcsh(最近ではkshや
tcshかな?)のシェルスクリプトのなかでコマンドラインパラメータを表す変数として$nが使用されて
おり(中略)これにあわせてawkで$nが使用されているようなのである」と書いてある。
『AWK実践入門』(技術評論社 初版)
>>766にあるように特別な変数として扱われており、リファレンスにも$が演算子で
あることの記載がない。
(続く)
少し調べてみた(調べたというほどの作業はしてないか)。
まず書籍。手持ちの数冊で確認。
『プログラミング言語AWK』(トッパン 初版第7刷)
さいごのまとめで演算子一覧に記載。本文中(p8)では「欄は常に$1,$2のように
参照しなくてはいけないと思われているかもしれないが、実は$のあとには,欄の
番号を指し示すための任意の式を書いてもよい」と書かれている。また、p46には
「欄変数」の項に「入力行の欄(field)は,$1,$2から始まって,$NFという名で呼ばれる」
との記述がある。
『sed & awk プログラミング』(アスキー出版局 初版)
旧版。本文中(p212)で「フィールドを参照したいときには、フィールド演算子$を使えばよい」
また(p217)で「フィールドを参照するにはドル記号($)演算子を使う」、Appendix(p471)で
「それぞれのフィールドは、$1ならば最初のフィールドの値を参照し、」と表現されている。
Appendixの演算子一覧に記載。
『AWKを256倍使うための本』(アスキー出版局 初版)
Appendixで演算子一覧に記載されているが、本文(p65)で「分解された各フィールドは、
$nという変数(nは、始めのフィールドから順に1,2,3...となる。もちろん即値の代わりに変数を
指定することも可能だ)でアクセスすることができる」とある。他の箇所でも$n変数と書いてある
ところがある。p66で「各フィールドを表す$nであるが、なぜこんな名前になっているかご存じだろうか?
実はこれもUNIX文化からきているのだ。UNIXの代表的なシェルであるshやcsh(最近ではkshや
tcshかな?)のシェルスクリプトのなかでコマンドラインパラメータを表す変数として$nが使用されて
おり(中略)これにあわせてawkで$nが使用されているようなのである」と書いてある。
『AWK実践入門』(技術評論社 初版)
>>766にあるように特別な変数として扱われており、リファレンスにも$が演算子で
あることの記載がない。
(続く)
836835
2016/10/08(土) 22:00:44.45ID:66+5bUgM (続き)
ネットの情報。2016.10.8現在。
Gnu Awk ユーザーズガイド/The GAWK Manual/Effective AWK Programming
gawkの解説書。バージョン違いがあるようだが、翻訳版で目に留まったもの。
「定数でないフィールド番号」の項で「あるフィールドを参照するために、awk言語での任意の式を
`$'の後で使うことができる」と記述されている。「演算子の優先順位」の項では演算子として
並べられている。
man gawk
翻訳版、リナックスコマンドというサイト(www.linux-cmd.com)から。
「入力レコード中の各フィールドの値は、左から $1, $2 等という名前で参照できます。
$0 はレコード全体です。フィールドに値を代入することもできます。フィールドは定数だけでなく、
変数によって参照することもできます。」となっている。演算子のところに記載あり。
AWK Users JP
サイト中「awk 基礎文法最速マスター」のページで「特殊変数」の項に$0,$1〜$NFの説明。
フィールド参照の語はない。また、リファレンス的な演算子のまとめはない(?)。
ページ上部に「この文書は書きかけです」とあるので、未整備ということだろうか。
IBM Knowledge Center
awkコマンドのページ(www.ibm.com/support/knowledgecenter/ja/ssw_aix_71/
com.ibm.aix.cmds1/awk.htm)では「レコードとフィールドによるファイル処理」の項で
「各フィールドはフィールド変数によって参照されます。レコードの最初のフィールドには $1 変数、
2 番目のフィールドには $2 変数というように、変数が割り当てられます。」との記述。少しうしろの
方、「フィールド変数」の項でも「フィールド変数は、$ (ドル記号) とそれに続く数値または数値式で
指定します。」とある。$が演算子であることの記載はない。
てな感じで、『プログラミング言語AWK』でも「欄変数」という表現があり、誤解しそうな感じはする。
また、256倍本に書いてあるようにシェルスクリプト中のパラメータとして$nがあることから、$nが
(特別な)変数として認識されてしまっているのではないか、とも想像する。個人サイトのawkの解説
ページでは、$nという変数にフィールドが代入されると説明しているところもあった。そのように理解して
スクリプトを書いてもさして不都合はないだろうな、とは思うが。
ネットの情報。2016.10.8現在。
Gnu Awk ユーザーズガイド/The GAWK Manual/Effective AWK Programming
gawkの解説書。バージョン違いがあるようだが、翻訳版で目に留まったもの。
「定数でないフィールド番号」の項で「あるフィールドを参照するために、awk言語での任意の式を
`$'の後で使うことができる」と記述されている。「演算子の優先順位」の項では演算子として
並べられている。
man gawk
翻訳版、リナックスコマンドというサイト(www.linux-cmd.com)から。
「入力レコード中の各フィールドの値は、左から $1, $2 等という名前で参照できます。
$0 はレコード全体です。フィールドに値を代入することもできます。フィールドは定数だけでなく、
変数によって参照することもできます。」となっている。演算子のところに記載あり。
AWK Users JP
サイト中「awk 基礎文法最速マスター」のページで「特殊変数」の項に$0,$1〜$NFの説明。
フィールド参照の語はない。また、リファレンス的な演算子のまとめはない(?)。
ページ上部に「この文書は書きかけです」とあるので、未整備ということだろうか。
IBM Knowledge Center
awkコマンドのページ(www.ibm.com/support/knowledgecenter/ja/ssw_aix_71/
com.ibm.aix.cmds1/awk.htm)では「レコードとフィールドによるファイル処理」の項で
「各フィールドはフィールド変数によって参照されます。レコードの最初のフィールドには $1 変数、
2 番目のフィールドには $2 変数というように、変数が割り当てられます。」との記述。少しうしろの
方、「フィールド変数」の項でも「フィールド変数は、$ (ドル記号) とそれに続く数値または数値式で
指定します。」とある。$が演算子であることの記載はない。
てな感じで、『プログラミング言語AWK』でも「欄変数」という表現があり、誤解しそうな感じはする。
また、256倍本に書いてあるようにシェルスクリプト中のパラメータとして$nがあることから、$nが
(特別な)変数として認識されてしまっているのではないか、とも想像する。個人サイトのawkの解説
ページでは、$nという変数にフィールドが代入されると説明しているところもあった。そのように理解して
スクリプトを書いてもさして不都合はないだろうな、とは思うが。
837デフォルトの名無しさん
2016/10/08(土) 23:11:50.50ID:ZMh6U7O9 広範な調査乙。Gawkのrefcardでもちゃんとoperatorに含まれているなあ。
演算子と明確に認識していなくても、$の後に式OKと思っていれば差し支えなさそう。
演算子と明確に認識していなくても、$の後に式OKと思っていれば差し支えなさそう。
838デフォルトの名無しさん
2016/10/18(火) 23:10:18.54ID:TQpGgbw6 gawk4で関数ポインタみたいなもんが追加されましたけど、これlengthとかsubstrの
組込み関数や@loadした自作dllの関数とかにも使えるんですね
案外便利かも
@load "hage.dll"
BEGIN{
kumi = "length"
func = "hagefunc"
ng[1] = "substr"
print @kumi("ABC")
print @func("彡 ⌒ ミ ")
print @ng[1]("XYZ", 1, 1) # 配列越しに呼ぼうとしたらsyntax error・・・残念
}
組込み関数や@loadした自作dllの関数とかにも使えるんですね
案外便利かも
@load "hage.dll"
BEGIN{
kumi = "length"
func = "hagefunc"
ng[1] = "substr"
print @kumi("ABC")
print @func("彡 ⌒ ミ ")
print @ng[1]("XYZ", 1, 1) # 配列越しに呼ぼうとしたらsyntax error・・・残念
}
839デフォルトの名無しさん
2016/10/21(金) 17:10:59.85ID:MQQBNMPM >>756
こういう過疎スレで無駄に突っかかってくるやつむかつくんだが死ね
こういう過疎スレで無駄に突っかかってくるやつむかつくんだが死ね
840デフォルトの名無しさん
2016/11/23(水) 00:01:26.03ID:bt3mTQnz >>839
ブーメランかよwww
ブーメランかよwww
841デフォルトの名無しさん
2016/11/23(水) 01:18:15.98ID:noM2Pdp3 \おはげだー!/
842デフォルトの名無しさん
2016/11/30(水) 02:56:38.28ID:PeC/aWZc843C初心者
2017/02/28(火) 13:18:15.09ID:Mb8mQo1M awkスクリプトをCソースに変換してコンパイルするための「awka」というツールでできるだけ簡単にUTF−8サポートさせる方法を知りたいです。
ネットで散々調べましたがないようです?
ネットで散々調べましたがないようです?
844デフォルトの名無しさん
2017/03/02(木) 00:28:53.73ID:CDxvUfiY このスレも10周年か
845デフォルトの名無しさん
2017/03/05(日) 09:28:55.73ID:EQCsqksH846デフォルトの名無しさん
2017/03/05(日) 14:45:26.28ID:KmKKYedf gawkに対応してるなら大丈夫ってことかな?
asciiしか考えていないなら、ソース全チェック…。
要するに、日本語化するんだろうけど。
全然別の言語変換にちょっと咬んだことがあるんだけど、
製品化しちゃってからダブルバイト考慮してないことがわかって、かなり面倒だった。
とりあえず変換してから、ソース見て直すほうが早かったり(笑
がんばってね。
asciiしか考えていないなら、ソース全チェック…。
要するに、日本語化するんだろうけど。
全然別の言語変換にちょっと咬んだことがあるんだけど、
製品化しちゃってからダブルバイト考慮してないことがわかって、かなり面倒だった。
とりあえず変換してから、ソース見て直すほうが早かったり(笑
がんばってね。
847デフォルトの名無しさん
2017/03/06(月) 11:39:31.22ID:FdaYmB9f awkで $1,$2...$6 こんな出力を↓下にしたいんだけど どうすればいいですかね?
470230
470290
↓
002347
002479
470230
470290
↓
002347
002479
848デフォルトの名無しさん
2017/03/06(月) 12:33:46.83ID:FW5jfGh1 GNU awk の asort() を使うとか。
printf '470230\n470290\n' |
gawk -vFS= -vOFS= '{
for(i=1;i<=NF;i++){
arr[i]=$i
};
asort(arr);
for(i=1;i<=NF;i++){
$i=arr[i]
};
print
}'
printf '470230\n470290\n' |
gawk -vFS= -vOFS= '{
for(i=1;i<=NF;i++){
arr[i]=$i
};
asort(arr);
for(i=1;i<=NF;i++){
$i=arr[i]
};
}'
849デフォルトの名無しさん
2017/03/06(月) 15:19:43.83ID:FdaYmB9f ありがとう
gawk いれないでなんとかならないかな
gawk いれないでなんとかならないかな
850デフォルトの名無しさん
2017/03/06(月) 17:28:40.15ID:FW5jfGh1 う〜ん、そうなると awk を使わなくてもいいかな
printf '470230\n470290\n' |
while read -r n
do
echo "$n" | grep -o . | sort -n | tr -d '\n'; echo
done
printf '470230\n470290\n' |
while read -r n
do
echo "$n" | grep -o . | sort -n | tr -d '\n'; echo
done
851デフォルトの名無しさん
2017/03/06(月) 19:23:27.89ID:08XsJPyW852デフォルトの名無しさん
2017/03/06(月) 19:24:30.15ID:08XsJPyW853デフォルトの名無しさん
2017/03/06(月) 19:26:33.18ID:08XsJPyW >>840
ブーメランとかじゃなくて死ねって言ってんだから死ねボケ
ブーメランとかじゃなくて死ねって言ってんだから死ねボケ
854デフォルトの名無しさん
2017/03/07(火) 08:17:48.93ID:6Hf5Xh2e お疲れ様でした
855デフォルトの名無しさん
2017/03/09(木) 21:48:39.65ID:0T9qj2kA 連想配列で
echo '470230' | awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){a[$i]++}for(i=0;i<=9;i++){for(j=1;j<=a[i];j++){printf("%s", i)}}printf("\n")}'
002347
echo '470230' | awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){a[$i]++}for(i=0;i<=9;i++){for(j=1;j<=a[i];j++){printf("%s", i)}}printf("\n")}'
002347
856デフォルトの名無しさん
2017/03/10(金) 00:18:57.87ID:+B1nKlhG 既に否定されているがgawk4がもし使えたら
awk '{ORS="";PROCINFO["sorted_in"]="@val_num_asc";x=split($0,a,"");for (i in a)print a[i];print "\n"}'
awk '{ORS="";PROCINFO["sorted_in"]="@val_num_asc";x=split($0,a,"");for (i in a)print a[i];print "\n"}'
857デフォルトの名無しさん
2017/03/10(金) 04:05:38.25ID:wGo6zQ56 最近の gawk ならインクルードファイルが用意されてて join とか使えたり
gawk -vFS= -vOFS= -i join.awk '{split($0,a,"");asort(a);print join(a,1,length(a),SUBSEP)}'
gawk -vFS= -vOFS= -i join.awk '{split($0,a,"");asort(a);print join(a,1,length(a),SUBSEP)}'
858デフォルトの名無しさん
2017/04/04(火) 22:35:43.00ID:9/WMFGSO # gawk4の読込みタイムアウト機能、けっこう便利そう・・・だけどWindowsはCygwin版じゃないと使えない。残念無念。
BEGIN{
PROCINFO["/dev/stdin", "READ_TIMEOUT"] = 180000
print "3分間待ってやる"
getline t < "/dev/stdin"
if (t=="バルス") {
print "ああ…ああ…目があぁぁぁぁぁ〜!"
}
else {
print "時間だ!答えを訊こう!"
}
}
BEGIN{
PROCINFO["/dev/stdin", "READ_TIMEOUT"] = 180000
print "3分間待ってやる"
getline t < "/dev/stdin"
if (t=="バルス") {
print "ああ…ああ…目があぁぁぁぁぁ〜!"
}
else {
print "時間だ!答えを訊こう!"
}
}
859デフォルトの名無しさん
2017/09/16(土) 00:02:08.63ID:lO9EtkAG 自作の読込みパーサextensionでgz形式のファイルを食えるようにしてみたけど
パーサは一度にひとつしかロードできない設計らしく(ソースでそうなってた)
同じ読込みパーサ形式のxmlライブラリとは併用できなかった
ちょっと使いにくいなあ・・・
パーサは一度にひとつしかロードできない設計らしく(ソースでそうなってた)
同じ読込みパーサ形式のxmlライブラリとは併用できなかった
ちょっと使いにくいなあ・・・
860デフォルトの名無しさん
2017/10/09(月) 16:41:58.59ID:7/rU/a8H 4.2.0Betaあげ
861デフォルトの名無しさん
2017/10/16(月) 14:34:21.07ID:tJ1aGDYb ファイルの終端関係の謎のエラーに直面
「何で行末が欠ける?分からん、全然分からんぞ!」
と悶えていたら、
いつの間にかvimの設定が変になっていて、
書いたファイルがデフォで行末に\rが来る
ようになっていた。
brew でインストールvimインストールしたとき
妙な設定になったのか?
いやねawkのスクリプトで、
空フィールドが\rになったりとか
macOSなのに変だなあと思っていたのだが…
システム外vim使うときは要注意か。
「何で行末が欠ける?分からん、全然分からんぞ!」
と悶えていたら、
いつの間にかvimの設定が変になっていて、
書いたファイルがデフォで行末に\rが来る
ようになっていた。
brew でインストールvimインストールしたとき
妙な設定になったのか?
いやねawkのスクリプトで、
空フィールドが\rになったりとか
macOSなのに変だなあと思っていたのだが…
システム外vim使うときは要注意か。
862デフォルトの名無しさん
2017/10/16(月) 14:41:37.20ID:tJ1aGDYb うぉーっ、林檎のnumbersで書き出したCSVファイルが
DOS改行になっとる…罠だ
DOS改行になっとる…罠だ
863デフォルトの名無しさん
2017/10/22(日) 23:24:45.88ID:/qEHJ0vm お疲れ様でした
864デフォルトの名無しさん
2017/10/22(日) 23:26:23.47ID:/qEHJ0vm >>756
普段話題なく3年も続こうがべつにすごくないね
普段話題なく3年も続こうがべつにすごくないね
865デフォルトの名無しさん
2017/12/09(土) 10:00:30.84ID:/kecouyU BEGIN{for(i=1;i<=10000000;i++){printf "%08d", i > "test" } close("test)} の実行にかかる時間を
4.1.4と4.2.0で比較すると、4.2.0のほうが倍近く速くなってるね
fwriteのロックがどうたらの影響なんだろうけど
4.1.4と4.2.0で比較すると、4.2.0のほうが倍近く速くなってるね
fwriteのロックがどうたらの影響なんだろうけど
866デフォルトの名無しさん
2017/12/12(火) 21:01:15.07ID:zxiueT/o 懐かしいなぁ。
AWKは自由に現実的な限度はあるけど、書いてて楽しい言語だった。
AWKは自由に現実的な限度はあるけど、書いてて楽しい言語だった。
867デフォルトの名無しさん
2018/01/08(月) 11:00:30.57ID:szpKYJOz お疲れ様でした
868デフォルトの名無しさん
2018/01/12(金) 00:18:25.22ID:8Bbkgawk IDがgawkなので来ました
869デフォルトの名無しさん
2018/01/17(水) 10:09:56.59ID:MoHAEd1l AWKって基本的にUnicodeには対応してるんだよね。
GNUにしろBSDにしろ。
GNUにしろBSDにしろ。
870デフォルトの名無しさん
2018/01/17(水) 17:52:56.47ID:MoHAEd1l 置換函数の第二仮引数に[バックスペース][置換対象の文字列]みたいにしたい時は
gsub(/foo/, "\\\\&", $n)
ってしないといけないんだね。
gsub(/foo/, "\\bar", $n)
が foo -> \bar だったんで foo -> \foo は
gsub(/foo/, "\\&", $n)
でいいと思って半時程嵌った。
gsub(/foo/, "\\\\&", $n)
ってしないといけないんだね。
gsub(/foo/, "\\bar", $n)
が foo -> \bar だったんで foo -> \foo は
gsub(/foo/, "\\&", $n)
でいいと思って半時程嵌った。
871デフォルトの名無しさん
2018/01/18(木) 07:25:24.80ID:eRgrS92p872デフォルトの名無しさん
2018/03/09(金) 13:30:21.59ID:Yd19z7Tx ある行に 20 と 34 とはいってる
この行ごと除外したいけど・・・
この行ごと除外したいけど・・・
873デフォルトの名無しさん
2018/03/09(金) 14:33:06.31ID:X3i0O3oy grep -v ' 20 と 34 '
874デフォルトの名無しさん
2018/03/09(金) 21:38:00.87ID:3i0y1Him こうかな
gawk "$0!~/20|34/{print}"
gawk "$0!~/20|34/{print}"
875デフォルトの名無しさん
2018/03/09(金) 23:45:36.30ID:Ejthnyow AWK プログラムの基本構造となっている「パターンとアクションの対」のうち、
アクションが省略されている場合は入力行がそのまま出力される。
またパターンが単一の正規表現である場合は、その正規表現と $0 との照合が行われる。
gawk '!/20と34/'
gawk '!/20|34/'
アクションが省略されている場合は入力行がそのまま出力される。
またパターンが単一の正規表現である場合は、その正規表現と $0 との照合が行われる。
gawk '!/20と34/'
gawk '!/20|34/'
876デフォルトの名無しさん
2018/03/10(土) 21:39:17.88ID:NqpdHf3N こぴぺしてやってみたけど 両方消えちゃうんだよね
20 と 34があった場合 出力しない
片方でもあれば 出力する
awk '!/01 / && !/03 /' これも両方消えてる・・
20 と 34があった場合 出力しない
片方でもあれば 出力する
awk '!/01 / && !/03 /' これも両方消えてる・・
2018/03/11(日) 06:07:55.06ID:rsmr5+n0
878デフォルトの名無しさん
2018/03/11(日) 10:58:35.24ID:tN+YLJlR ありがとう
()はきがつかなかった・・
()はきがつかなかった・・
879デフォルトの名無しさん
2018/05/23(水) 20:10:48.40ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
0VDE5
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
0VDE5
880デフォルトの名無しさん
2018/06/08(金) 22:00:41.48ID:W8HYHVfd split関数より$0へ代入したほうが速いage
881デフォルトの名無しさん
2018/07/04(水) 22:29:02.55ID:gFgZc5FG 02P
882デフォルトの名無しさん
2018/07/05(木) 16:52:56.22ID:AeL6VB/V 0VDE5
883デフォルトの名無しさん
2018/09/11(火) 09:26:39.50ID:196Ukd9B シェルスクリプト書いててどうしようもないときだけ使ってる
884デフォルトの名無しさん
2018/12/02(日) 13:44:27.64ID:jISJOvCb AWKって重いと勝手に思ってたけど下手にシェルで制御構文作るより早いね
尤もWSLでやってるのでforkの時間とかそういう問題かもしれないが。
尤もWSLでやってるのでforkの時間とかそういう問題かもしれないが。
885デフォルトの名無しさん
2018/12/02(日) 14:22:41.55ID:Bx+z5yQP >>884
重いと言ってもC比だからな。
今時の超大富豪言語PythonやRubyとなら同程度でもおかしくはない。
Cygwinのshが重かったのはご存じの通りforkが原因だ。
気になるならVirtualBox等でlinux環境を構築してその上でテストしてみればいい。
重いと言ってもC比だからな。
今時の超大富豪言語PythonやRubyとなら同程度でもおかしくはない。
Cygwinのshが重かったのはご存じの通りforkが原因だ。
気になるならVirtualBox等でlinux環境を構築してその上でテストしてみればいい。
886デフォルトの名無しさん
2018/12/22(土) 02:10:55.36ID:V7w17XLB gawk4にて配列の配列に存在する全要素数を
カウントする関数を作ったんですが、
もっと早いコードにならないでしょうか?
どなたかヒントをください。お願いします。
function count_array(arr, n, i) {
for (i in arr) {
if (isarray(arr[i])) count_array(arr[i], n);
else n[0]++;
}
return n[0];
}
カウントする関数を作ったんですが、
もっと早いコードにならないでしょうか?
どなたかヒントをください。お願いします。
function count_array(arr, n, i) {
for (i in arr) {
if (isarray(arr[i])) count_array(arr[i], n);
else n[0]++;
}
return n[0];
}
887デフォルトの名無しさん
2018/12/22(土) 02:57:46.65ID:kZtDaodg length(arr) でダメなの?
888デフォルトの名無しさん
2018/12/22(土) 20:12:58.98ID:VPYzPSxJ 886です。
ダメなんです。
BEGIN {
a[1] = 1;
a[2][1] = 21;
a[2][2] = 22;
a[3] = 3;
a[4][1][1] = 411;
a[4][2] = 42;
a[4][3][2][1] = 256;
for (i = 0; i < 9; i++) b[i] = i;
c["foo"]["corge"] = "grault";
c["foo"]["bar"] = "garply";
c["baz"]["corge"] = "waldo";
c["baz"]["quux"] = "fred";
print "length(a) = " length(a);
print "length(a) = " length(b);
print "length(a) = " length(c);
print "count_array(a) = " count_array(a);
print "count_array(b) = " count_array(b);
print "count_array(c) = " count_array(c);
}
length(a) = 4
length(b) = 9
length(c) = 2
count_array(a) = 7
count_array(b) = 9
count_array(c) = 4
再帰を使う以外に方法があれば、
と思い質問した次第です。
ダメなんです。
BEGIN {
a[1] = 1;
a[2][1] = 21;
a[2][2] = 22;
a[3] = 3;
a[4][1][1] = 411;
a[4][2] = 42;
a[4][3][2][1] = 256;
for (i = 0; i < 9; i++) b[i] = i;
c["foo"]["corge"] = "grault";
c["foo"]["bar"] = "garply";
c["baz"]["corge"] = "waldo";
c["baz"]["quux"] = "fred";
print "length(a) = " length(a);
print "length(a) = " length(b);
print "length(a) = " length(c);
print "count_array(a) = " count_array(a);
print "count_array(b) = " count_array(b);
print "count_array(c) = " count_array(c);
}
length(a) = 4
length(b) = 9
length(c) = 2
count_array(a) = 7
count_array(b) = 9
count_array(c) = 4
再帰を使う以外に方法があれば、
と思い質問した次第です。
889デフォルトの名無しさん
2018/12/22(土) 21:58:49.47ID:b6CiPLFa 要素を追加するときに
ノード毎に集計値が必要ならそれぞれのノード毎の集計値を保存しとけばいい
そうすれば集計しなおす必要ない
超速いハズ
集計しないからな
ノード毎に集計値が必要ならそれぞれのノード毎の集計値を保存しとけばいい
そうすれば集計しなおす必要ない
超速いハズ
集計しないからな
890デフォルトの名無しさん
2018/12/22(土) 22:19:10.29ID:b6CiPLFa こういった集計値がほしいのは分かる
aho(9)
┣aho1(5)
┃┣aho11(3)
┃┃┣aho111(1)
┃┃┗aho112(1)
┃┗aho12(1)
┗aho2(3)
┣aho21(1)
┗aho22(1)
lengthでは、きっとこんな感じでしかとれない
aho(2)
┣aho1(2)
┃┣aho11(2)
┃┃┣aho111(n/a)
┃┃┗aho112(n/a)
┃┗aho12(n/a)
┗aho2(2)
┣aho21(n/a)
┗aho22(n/a)
aho(9)
┣aho1(5)
┃┣aho11(3)
┃┃┣aho111(1)
┃┃┗aho112(1)
┃┗aho12(1)
┗aho2(3)
┣aho21(1)
┗aho22(1)
lengthでは、きっとこんな感じでしかとれない
aho(2)
┣aho1(2)
┃┣aho11(2)
┃┃┣aho111(n/a)
┃┃┗aho112(n/a)
┃┗aho12(n/a)
┗aho2(2)
┣aho21(n/a)
┗aho22(n/a)
891デフォルトの名無しさん
2018/12/22(土) 23:48:44.15ID:omdhpVTe >>888
lengthは、配列aの要素に配列があると要素としての配列の
中の要素数まではカウントしない、やりたいのは要素としての配列に
含まれる要素もカウントしたい、ということか。
function count_array2(arr, cnt, i) {
n=0;
for (i in arr) {
if(isarray(arr[i])){
cnt+=length(arr[i]);
}
else n++;
}
return n;
}
だと
a[1] = 1;
a[2][1] = 21;
a[2][2] = 22;
a[3] = 3;
a[4][1][1] = 411;
a[4][2] = 42;
a[4][3][2][1] = 256;
a[4][3][3][2] = 257;
みたいなのでうまくいかない(1番目と2番目の添え字(?)が同じ)。
arr[i][j]...と続ければ(最初にlength(arr)で続ける深さを決めて)
いけるように思うが、だったら再帰するのが素直か。
lengthは、配列aの要素に配列があると要素としての配列の
中の要素数まではカウントしない、やりたいのは要素としての配列に
含まれる要素もカウントしたい、ということか。
function count_array2(arr, cnt, i) {
n=0;
for (i in arr) {
if(isarray(arr[i])){
cnt+=length(arr[i]);
}
else n++;
}
return n;
}
だと
a[1] = 1;
a[2][1] = 21;
a[2][2] = 22;
a[3] = 3;
a[4][1][1] = 411;
a[4][2] = 42;
a[4][3][2][1] = 256;
a[4][3][3][2] = 257;
みたいなのでうまくいかない(1番目と2番目の添え字(?)が同じ)。
arr[i][j]...と続ければ(最初にlength(arr)で続ける深さを決めて)
いけるように思うが、だったら再帰するのが素直か。
892デフォルトの名無しさん
2018/12/23(日) 00:54:43.50ID:quoNoaXg 886です。889さんこんな感じでしょうか?
BEGIN {
addnode(a, "1-1", "start");
addnode(a, "1-2", "done");
addnode(a, "1-3", "result");
addnode(a, "1-4", "print");
addnode(a, "2", "count");
addnode(a, "3-1-1", "return");
for (i in a[1]) print "a[1][" i "] = " a[1][i];
print "a[2] = " a[2];
print "a[3][1][1] = " a[3][1][1];
print "\n_ele_sum = " _ele_sum;
}
function addnode(arr, i, val, p) {
ct = split(i, list, "-");
switch (ct) {
case 1: arr[list[1]] = val; break;
case 2: arr[list[1]][list[2]] = val; break;
case 3: arr[list[1]][list[2]][list[3]] = val; break;
default:
}
_ele_sum++;
}
a[1][1] = start
a[1][2] = done
a[1][3] = result
a[1][4] = print
a[2] = count
a[3][1][1] = return
_ele_sum = 6
BEGIN {
addnode(a, "1-1", "start");
addnode(a, "1-2", "done");
addnode(a, "1-3", "result");
addnode(a, "1-4", "print");
addnode(a, "2", "count");
addnode(a, "3-1-1", "return");
for (i in a[1]) print "a[1][" i "] = " a[1][i];
print "a[2] = " a[2];
print "a[3][1][1] = " a[3][1][1];
print "\n_ele_sum = " _ele_sum;
}
function addnode(arr, i, val, p) {
ct = split(i, list, "-");
switch (ct) {
case 1: arr[list[1]] = val; break;
case 2: arr[list[1]][list[2]] = val; break;
case 3: arr[list[1]][list[2]][list[3]] = val; break;
default:
}
_ele_sum++;
}
a[1][1] = start
a[1][2] = done
a[1][3] = result
a[1][4] = print
a[2] = count
a[3][1][1] = return
_ele_sum = 6
893デフォルトの名無しさん
2018/12/23(日) 01:05:13.25ID:quoNoaXg 886です。
pとか関係ないパラメータ入れてしまってごめんなさい。
addnode(a, "1-5-1", "connot");
これができません。
a["5"]がスカラーだと言っています。
pとか関係ないパラメータ入れてしまってごめんなさい。
addnode(a, "1-5-1", "connot");
これができません。
a["5"]がスカラーだと言っています。
894デフォルトの名無しさん
2018/12/23(日) 01:15:19.57ID:quoNoaXg 訂正a["1"]["5"]がスカラーの文脈だと言っています。でした
895デフォルトの名無しさん
2018/12/23(日) 01:41:32.84ID:quoNoaXg 886です
for (i in a[1]) print "a[1][" i "] = " a[1][i];
でa[1][5][1]が引っかかっていたようです。
自爆でした。すみません。
for (i in a[1]) print "a[1][" i "] = " a[1][i];
でa[1][5][1]が引っかかっていたようです。
自爆でした。すみません。
896デフォルトの名無しさん
2018/12/23(日) 02:59:04.54ID:quoNoaXg 886です。
親ノード毎?に保存する方法がまだわかりませんが、
明日以降考えます。
みなさん、ご協力ありがとうございました。
親ノード毎?に保存する方法がまだわかりませんが、
明日以降考えます。
みなさん、ご協力ありがとうございました。
897デフォルトの名無しさん
2018/12/23(日) 08:49:07.73ID:S8HMq/6c gawk4でとにかく速いのが良いならcで拡張関数作るのが良いかと(反則?)
flatten_array_typed関数(4.1.4はflatten_array関数)でawk_flat_array_t構造体のメンバ変数countに要素数が入りますので
要素がAWK_ARRAYなら再帰するように処理すれば出来上がり
APIの使い方は
extension\rwarray.cとか
https://www.gnu.org/software/gawk/manual/html_node/Flattening-Arrays.html#Flattening-Arraysを参考に
gawkだけでやる場合、もし配列の要素数が10万とか100万あるのなら、関数の引数を出来るだけ減らして
関数内からグローバル変数を直接参照したほうが速くなると思います
flatten_array_typed関数(4.1.4はflatten_array関数)でawk_flat_array_t構造体のメンバ変数countに要素数が入りますので
要素がAWK_ARRAYなら再帰するように処理すれば出来上がり
APIの使い方は
extension\rwarray.cとか
https://www.gnu.org/software/gawk/manual/html_node/Flattening-Arrays.html#Flattening-Arraysを参考に
gawkだけでやる場合、もし配列の要素数が10万とか100万あるのなら、関数の引数を出来るだけ減らして
関数内からグローバル変数を直接参照したほうが速くなると思います
898デフォルトの名無しさん
2018/12/23(日) 11:20:10.63ID:qffc/3mK もともと添え字がすべて文字列で保存する仕様というのはしってはいたが
多次元配列はaho[i,j]という形式にして工夫して使えということらしいな
awkで多次元配列なんか使ったことないから知らんかったわ
とういワケでにその形式で多次元配列をlengthでとると>>886で取得したい値になる
当然といえば当然
特定の次元の列だけのとりかたはよくわからん とれんのかコレ
http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_12.html#SEC119
Using Numbers to Subscript Arrays
配列について重要なのは、配列の添え字は常に 文字列として扱われるということである。
配列の添え字に数字を使った場合、それは添え字付けに使われる前に 文字列に変換される
http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_12.html#SEC121
Multi-dimensional Arrays
多次元配列とは、配列要素の指定を複数の添字の並びによって行う配列である。例え ば二次元の配列は二つの添字を必要とする。
一般的な(awkも含めた大多数の 言語では) 二次元配列の要素に対する参照は grid[x,y]このよ うに行う。 (gridは配列の名前)
セパレータには組み込み変数SUBSEPに格納 されている値が使われる。
多次元配列はaho[i,j]という形式にして工夫して使えということらしいな
awkで多次元配列なんか使ったことないから知らんかったわ
とういワケでにその形式で多次元配列をlengthでとると>>886で取得したい値になる
当然といえば当然
特定の次元の列だけのとりかたはよくわからん とれんのかコレ
http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_12.html#SEC119
Using Numbers to Subscript Arrays
配列について重要なのは、配列の添え字は常に 文字列として扱われるということである。
配列の添え字に数字を使った場合、それは添え字付けに使われる前に 文字列に変換される
http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_12.html#SEC121
Multi-dimensional Arrays
多次元配列とは、配列要素の指定を複数の添字の並びによって行う配列である。例え ば二次元の配列は二つの添字を必要とする。
一般的な(awkも含めた大多数の 言語では) 二次元配列の要素に対する参照は grid[x,y]このよ うに行う。 (gridは配列の名前)
セパレータには組み込み変数SUBSEPに格納 されている値が使われる。
899デフォルトの名無しさん
2018/12/23(日) 11:43:46.94ID:7N3pX2Wi900デフォルトの名無しさん
2018/12/23(日) 22:29:12.74ID:qffc/3mK まず入力から多次元配列を読込む処理でも作ってみるか
できるのかがよく分からん
コレがすんなりできないとコレ自体が使えるシロモノにならなそうだしな
テストデータは作ってみた
https://ideone.com/Sir0IE
awkのこの多次元配列についてほかのとこで書いてあるの読んでみると
色々と面倒なことがおきるはのは分かった
特に問題がおきそうなのは一度配列やスカラーで要素を追加すると、
その配列やスカラーを変えて上書きする場合明示的にそれを削除しないと上書きして使えない
きっとなノードを削除するときはその要素゙から辿って一番深いとこから再帰的に削除しないと残骸が残る
cのメモリリークと同じことが起きると推定される
いまいちこの多次元配列に使い道があるのかどうかが分からない
できるのかがよく分からん
コレがすんなりできないとコレ自体が使えるシロモノにならなそうだしな
テストデータは作ってみた
https://ideone.com/Sir0IE
awkのこの多次元配列についてほかのとこで書いてあるの読んでみると
色々と面倒なことがおきるはのは分かった
特に問題がおきそうなのは一度配列やスカラーで要素を追加すると、
その配列やスカラーを変えて上書きする場合明示的にそれを削除しないと上書きして使えない
きっとなノードを削除するときはその要素゙から辿って一番深いとこから再帰的に削除しないと残骸が残る
cのメモリリークと同じことが起きると推定される
いまいちこの多次元配列に使い道があるのかどうかが分からない
901デフォルトの名無しさん
2018/12/23(日) 23:32:19.00ID:nM/PpEMV lispが最適
awkは不適
awkは不適
902デフォルトの名無しさん
2018/12/24(月) 01:01:19.83ID:ivcUrO89 https://ideone.com/PFBwQU
どうにかして動的に配列を構成できないか調べてみたが
やりかたが分からん
>>892の質問してるのが書いた方法で
一旦多次元配列を読む込むようにはしてみた
質問してるのが欲しいといってる要素の数は
結局入力の行数と同じになる
どうにかして動的に配列を構成できないか調べてみたが
やりかたが分からん
>>892の質問してるのが書いた方法で
一旦多次元配列を読む込むようにはしてみた
質問してるのが欲しいといってる要素の数は
結局入力の行数と同じになる
903デフォルトの名無しさん
2018/12/24(月) 01:07:37.50ID:ivcUrO89904デフォルトの名無しさん
2018/12/24(月) 09:11:50.63ID:PbNokzxn >>900
> きっとなノードを削除するときはその要素゙から辿って一番深いとこから再帰的に削除しないと残骸が残る
delete a は a[1][2] や a[3][4][5] などの子配列含む配列a全体の使用メモリをまとめて "再利用" にまわす
一部の要素を残しておきたい事情が無ければ、delete a[1][2]; delete a[3][4][5]; ... のように子配列を個別に
deleteする必要は無い
たとえば下の(2)は多次元配列bが多次元配列aの使用済みメモリを再利用するので
終了間際のメモリ使用量は(1)(2)どちらも同じになるが、(2)の delete a を消すと倍程度に増える
(1) BEGIN{for(i=1; i<=1000000; i++){a[i%10][i]=i}}
(2) BEGIN{for(i=1; i<=1000000; i++){a[i%10][i]=i} delete a; for(i=1; i<=1000000; i++){b[i%10][i]=i}}
メモリ再利用の仕組みはThe GAWK Manualには書いていないけどAharon Robbinsが↓で回答している
https://groups.google.com/forum/#!topic/comp.lang.awk/CKwoes0_63U
> きっとなノードを削除するときはその要素゙から辿って一番深いとこから再帰的に削除しないと残骸が残る
delete a は a[1][2] や a[3][4][5] などの子配列含む配列a全体の使用メモリをまとめて "再利用" にまわす
一部の要素を残しておきたい事情が無ければ、delete a[1][2]; delete a[3][4][5]; ... のように子配列を個別に
deleteする必要は無い
たとえば下の(2)は多次元配列bが多次元配列aの使用済みメモリを再利用するので
終了間際のメモリ使用量は(1)(2)どちらも同じになるが、(2)の delete a を消すと倍程度に増える
(1) BEGIN{for(i=1; i<=1000000; i++){a[i%10][i]=i}}
(2) BEGIN{for(i=1; i<=1000000; i++){a[i%10][i]=i} delete a; for(i=1; i<=1000000; i++){b[i%10][i]=i}}
メモリ再利用の仕組みはThe GAWK Manualには書いていないけどAharon Robbinsが↓で回答している
https://groups.google.com/forum/#!topic/comp.lang.awk/CKwoes0_63U
905デフォルトの名無しさん
2018/12/24(月) 15:58:51.02ID:ivcUrO89 なるほど
ありがとう
きっと再利用されるから
気にせず放置でいいのか
ありがとう
きっと再利用されるから
気にせず放置でいいのか
906デフォルトの名無しさん
2018/12/24(月) 17:27:46.25ID:8PLVwc4u >>902 886です。ありがとうございます。動的とはこんな感じでしょうか?
一度作って、削除するという変な仕様ですが。
BEGIN {
a[1] = "foo";
a[2][1] = "bar";
a[2][2] = "baz";
a[3] = "qux";
a[4][1][1] = "quux";
a[4][2] = "corge";
for (i = 1; i < 5; i++) {
meta_ar_init(b, i);
clone(b[i], a);
}
}
function meta_ar_init(ar, init_num) {
ar[init_num][1] = "";
delete ar[init_num][1];
}
function clone(lhs, rhs, i) {
for (i in rhs) {
if (isarray(rhs[i])) {
lhs[i][1] = "";
delete lhs[i][1];
clone(lhs[i], rhs[i]);
} else
lhs[i] = rhs[i];
}
}
一度作って、削除するという変な仕様ですが。
BEGIN {
a[1] = "foo";
a[2][1] = "bar";
a[2][2] = "baz";
a[3] = "qux";
a[4][1][1] = "quux";
a[4][2] = "corge";
for (i = 1; i < 5; i++) {
meta_ar_init(b, i);
clone(b[i], a);
}
}
function meta_ar_init(ar, init_num) {
ar[init_num][1] = "";
delete ar[init_num][1];
}
function clone(lhs, rhs, i) {
for (i in rhs) {
if (isarray(rhs[i])) {
lhs[i][1] = "";
delete lhs[i][1];
clone(lhs[i], rhs[i]);
} else
lhs[i] = rhs[i];
}
}
907デフォルトの名無しさん
2018/12/27(木) 20:01:48.39ID:pQqvXPza908デフォルトの名無しさん
2018/12/27(木) 22:46:53.38ID:X7jxTwwp >>906の「一度作って、削除する」というのは
https://www.gnu.org/software/gawk/manual/gawk.html#Arrays-of-Arrays
ここの一番下のsplitがエラー吐く例の回避策で、配列の要素を最初から配列扱いすることはできないから
予め次階層にダミー要素をぶら下げておき、本命を格納し終えたらダミーは消すって意味かな
自分で書いたらこんなんなったけど、いちおう何次元でも格納できそう
https://ideone.com/83ykKF#stdin
https://www.gnu.org/software/gawk/manual/gawk.html#Arrays-of-Arrays
ここの一番下のsplitがエラー吐く例の回避策で、配列の要素を最初から配列扱いすることはできないから
予め次階層にダミー要素をぶら下げておき、本命を格納し終えたらダミーは消すって意味かな
自分で書いたらこんなんなったけど、いちおう何次元でも格納できそう
https://ideone.com/83ykKF#stdin
909デフォルトの名無しさん
2019/01/01(火) 00:00:01.96ID:7rl7mk2H 2019年もawkのお世話になります
910デフォルトの名無しさん
2019/02/05(火) 18:58:36.44ID:9Z2hbdGL 60くらいの教授が40年くらい前にAWKでアセンブラ作ったとか言ってたんだけど
当時に既にあったということと当時から小規模なコンパイラなら作れるくらい高性能だったことに驚いた
当時に既にあったということと当時から小規模なコンパイラなら作れるくらい高性能だったことに驚いた
911デフォルトの名無しさん
2019/02/05(火) 19:10:49.73ID:dIIT7BCG アセンブラをコンパイラとは呼ばないが
912デフォルトの名無しさん
2019/02/06(水) 10:31:17.59ID:+qagyc5o aho
913デフォルトの名無しさん
2019/02/06(水) 13:09:33.86ID:j4QdsmCl asort、asortiがよくわからなかったので試した結果
# a
a[5] ="a5"
a[1] ="a1"
a[3] ="a8"
# asort(a,as)
as[1] ="a1"
as[2] ="a5"
as[3] ="a8"
# asorti(a,asi)
asi[1]=1
asi[2]=3
asi[3]=5
なんだそういうことだったのかとわかった
# a
a[5] ="a5"
a[1] ="a1"
a[3] ="a8"
# asort(a,as)
as[1] ="a1"
as[2] ="a5"
as[3] ="a8"
# asorti(a,asi)
asi[1]=1
asi[2]=3
asi[3]=5
なんだそういうことだったのかとわかった
914デフォルトの名無しさん
2019/02/06(水) 17:39:23.37ID:+3VpeZVh915デフォルトの名無しさん
2019/02/23(土) 17:41:13.06ID:Y0E0nwid awkでファイルがあるかどうかの判別は、どのようにしたらよいのでしょうか?
具体的にはBEGINの中で
getline a < "/dev/stdin";
fn = a".txt"
と任意のファイル名を作った後、そのファイルがあるかどうかを確認したいんです。
もしファイルがすでにあったら処理は終了、無ければ以後の処理をそのファイルにリダイレクトする、という感じです。
具体的にはBEGINの中で
getline a < "/dev/stdin";
fn = a".txt"
と任意のファイル名を作った後、そのファイルがあるかどうかを確認したいんです。
もしファイルがすでにあったら処理は終了、無ければ以後の処理をそのファイルにリダイレクトする、という感じです。
916デフォルトの名無しさん
2019/02/24(日) 00:16:02.91ID:Cwr1i6xY if(getline<fn!=-1)exit
とか?
とか?
917デフォルトの名無しさん
2019/02/24(日) 11:45:53.93ID:FuDjIOWV >>916
できました!ありがとうございます!!
できました!ありがとうございます!!
918デフォルトの名無しさん
2019/03/21(木) 08:10:09.34ID:pGDO/F2C 答えが出ないなんで?
#!/usr/bin/awk -f
BEGIN{
print game(10, 24);
}
function game(coin,depth, i,j){
if(memo[coin,depth]){
return memo[coin,depth];
}
if(coin == 0){
return 0;
}
if(depth == 0){
return 1;
}
win = game(coin + 1, depth - 1);
lose = game(coin - 1, depth - 1);
memo[coin,depth] = win + lose;
}
#!/usr/bin/awk -f
BEGIN{
print game(10, 24);
}
function game(coin,depth, i,j){
if(memo[coin,depth]){
return memo[coin,depth];
}
if(coin == 0){
return 0;
}
if(depth == 0){
return 1;
}
win = game(coin + 1, depth - 1);
lose = game(coin - 1, depth - 1);
memo[coin,depth] = win + lose;
}
919デフォルトの名無しさん
2019/03/21(木) 09:51:18.96ID:WMaCNtBE 最後の memo[coin,depth] = win + lose はそのまま関数の戻り値として
return しなければならないが、それを忘れている。
さらに、正しい答えが返らない原因が 2 点。
関数定義の引数名間違い: i,j → win,lose。
if(depth == 0) と if(coin == 0) の判定を行う順序が逆。
return しなければならないが、それを忘れている。
さらに、正しい答えが返らない原因が 2 点。
関数定義の引数名間違い: i,j → win,lose。
if(depth == 0) と if(coin == 0) の判定を行う順序が逆。
920デフォルトの名無しさん
2019/03/21(木) 14:19:16.55ID:pGDO/F2C921デフォルトの名無しさん
2019/03/21(木) 21:25:33.68ID:ZeSQsBE1 それぐらいの処理は、Ruby で作れ!
922デフォルトの名無しさん
2019/03/21(木) 23:54:47.78ID:7AyLRSvD オーク英雄物語 〜忖度列伝〜
https://ncode.syosetu.com/n8418ff/1/ 👀
Rock54: Caution(BBR-MD5:0be20a4887bc3d3353f527d3636c44e3)
https://ncode.syosetu.com/n8418ff/1/ 👀
Rock54: Caution(BBR-MD5:0be20a4887bc3d3353f527d3636c44e3)
923デフォルトの名無しさん
2019/04/01(月) 17:01:28.78ID:nwflCE8J >>921
awkの方がいいときもある
installしなくていい
タスクマネージャでみているとrubyよりメモリを食わない時もある
融通の利く配列が超便利
通信、Hash、sortなど使いまくる時はrubyのほうがいいけど
awkの方がいいときもある
installしなくていい
タスクマネージャでみているとrubyよりメモリを食わない時もある
融通の利く配列が超便利
通信、Hash、sortなど使いまくる時はrubyのほうがいいけど
924デフォルトの名無しさん
2019/04/01(月) 17:12:08.21ID:Tc5+6fel いや、Perlだ。
理由
俺が慣れてるから。
理由
俺が慣れてるから。
925デフォルトの名無しさん
2019/04/01(月) 22:48:54.89ID:0AqZLgzF Perlはまぁ慣れ以外に使う意味はあまり見出せない。
926デフォルトの名無しさん
2019/04/02(火) 04:44:16.86ID:3dIjgbOm 漏れは、Windows 10・WSL・Ubuntu 16.04 だけど、
sudo apt install ruby だけで、Ruby 2.3 が入った
2.4 以降の新しい書き方さえしなければ、動く
Perl, Python は、最初から入っているけど
sudo apt install ruby だけで、Ruby 2.3 が入った
2.4 以降の新しい書き方さえしなければ、動く
Perl, Python は、最初から入っているけど
927デフォルトの名無しさん
2019/04/02(火) 10:00:50.55ID:USFH8Mum >>926
死ね
死ね
928デフォルトの名無しさん
2019/04/02(火) 10:29:57.68ID:egwP5Lwa Perl脳だとdieなどと言いたがるんかね。
929デフォルトの名無しさん
2019/04/02(火) 12:24:56.71ID:exqjvsIl Perl die好き
930デフォルトの名無しさん
2019/04/02(火) 12:34:58.56ID:m0agfZtU w
931デフォルトの名無しさん
2019/04/17(水) 15:16:55.69ID:bLXqfCqA GNU AWK 5.0がリリース。8年ぶりのメジャーバージョンアップ。正規表現ライブラリが
GLIBCからGNULIBへ移行、名前空間が実装 2019年4月17日
https://www.publickey1.jp/blog/19/gnu_awk_508glibcgnulib.html
UnixやLinuxにおいてsedやgrepなどと並んでよく知られているツールの1つがawk(オーク)
です。このawkのGNUプロジェクトによる実装の最新版「GNU AWK 5.0」(gawk 5.0)の
リリースが発表されました。
2011年にリリースされたGNU AWK 4.0から8年ぶり、直前のバージョンでとして2017年10月に
リリースされた4.2.0からは約1年半ぶりとなります。
AWKはいわゆるスクリプティング言語の一種。変数や関数、制御文など基本的な構文を備え、
テキストファイルを効率的に処理できるのが特徴です。
GNU AWK 5.0の新機能としては、printfの%aおよび%Aの書式がPOSIX標準に準拠したこと、
正規表現のルーチンが、長年にわたってメンテナンスされてきたGLIBCからGNULIBに
置き換わったことなど。
また、識別子に非英語文字を使うためのドキュメント化されていなかったオプションなどは
削除され、ソースコードはC99環境が想定されるようになっています。
そして新たに名前空間が実装されています(詳細はマニュアルを参照とのこと)。
GLIBCからGNULIBへ移行、名前空間が実装 2019年4月17日
https://www.publickey1.jp/blog/19/gnu_awk_508glibcgnulib.html
UnixやLinuxにおいてsedやgrepなどと並んでよく知られているツールの1つがawk(オーク)
です。このawkのGNUプロジェクトによる実装の最新版「GNU AWK 5.0」(gawk 5.0)の
リリースが発表されました。
2011年にリリースされたGNU AWK 4.0から8年ぶり、直前のバージョンでとして2017年10月に
リリースされた4.2.0からは約1年半ぶりとなります。
AWKはいわゆるスクリプティング言語の一種。変数や関数、制御文など基本的な構文を備え、
テキストファイルを効率的に処理できるのが特徴です。
GNU AWK 5.0の新機能としては、printfの%aおよび%Aの書式がPOSIX標準に準拠したこと、
正規表現のルーチンが、長年にわたってメンテナンスされてきたGLIBCからGNULIBに
置き換わったことなど。
また、識別子に非英語文字を使うためのドキュメント化されていなかったオプションなどは
削除され、ソースコードはC99環境が想定されるようになっています。
そして新たに名前空間が実装されています(詳細はマニュアルを参照とのこと)。
932デフォルトの名無しさん
2019/04/17(水) 17:19:50.38ID:fsOEjVgH sedとawkで簡単にできることを
他の方法でやってるアホを見ると優越感に浸れるよな
他の方法でやってるアホを見ると優越感に浸れるよな
933デフォルトの名無しさん
2019/04/17(水) 21:27:37.50ID:Cw3S472M 5.0.0じゃなくて4.3.0でいいじゃんって更新内容だな・・・
934デフォルトの名無しさん
2019/04/17(水) 23:57:17.65ID:t5VcExa0 今時っぽく定期的にメジャーバージョンアップしていく作戦?
そろそろAWKCARD印刷してみようかな…
そろそろAWKCARD印刷してみようかな…
935デフォルトの名無しさん
2019/04/18(木) 00:37:48.90ID:y8/6ebia >>932
簡単な変換なのにWindowsとかでいきなりExcelでやろうとしちゃう人を見るとそこまでせんでも良いじゃないかとは思ってしまうな。
まあ日頃Windowsで事務処理的な事している人からすればそれ以上最良で分かりやすい環境はないんだろうけどな。
なんでもかんでもそれでやろうとして余計に分かりづらく複雑になってうまく行かずにハマっているのを見ると哀れに感じる。
簡単な変換なのにWindowsとかでいきなりExcelでやろうとしちゃう人を見るとそこまでせんでも良いじゃないかとは思ってしまうな。
まあ日頃Windowsで事務処理的な事している人からすればそれ以上最良で分かりやすい環境はないんだろうけどな。
なんでもかんでもそれでやろうとして余計に分かりづらく複雑になってうまく行かずにハマっているのを見ると哀れに感じる。
936デフォルトの名無しさん
2019/06/01(土) 01:13:44.70ID:QInzSHhj こういう記法ができることを知らず、気づくのに数年かかった
正規表現比較のifで変数を使える、gsubなどで変数を使える
txt=”aabbcdefg1234”
x=”^” substr{$0,1,1} ”+”
if {txt 〜 x}print ”ok”
y=substr{$0,1,1}
z=substr{$0,2,1}
gsub{y,z,$0}
(半角だと書き込みエラーになるので全角に変換)
正規表現比較のifで変数を使える、gsubなどで変数を使える
txt=”aabbcdefg1234”
x=”^” substr{$0,1,1} ”+”
if {txt 〜 x}print ”ok”
y=substr{$0,1,1}
z=substr{$0,2,1}
gsub{y,z,$0}
(半角だと書き込みエラーになるので全角に変換)
937デフォルトの名無しさん
2019/06/01(土) 01:15:01.39ID:QInzSHhj938デフォルトの名無しさん
2019/06/01(土) 05:25:56.80ID:cEFw76xP ふふふ知ってた。
939デフォルトの名無しさん
2019/06/05(水) 00:27:37.11ID:/Z5C9xDG The AWK Programming Language (の邦訳本) から入ったので知ってはいるけど、
エスケープ文字を考慮してコードを書くのが面倒なので極力避けてるな。
文字列が正規表現へ「型変換」されるときの振舞いについて、本には一応書いてある。
エスケープ文字を考慮してコードを書くのが面倒なので極力避けてるな。
文字列が正規表現へ「型変換」されるときの振舞いについて、本には一応書いてある。
940デフォルトの名無しさん
2019/06/19(水) 04:52:26.36ID:tVNS+22r 【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
941デフォルトの名無しさん
2019/06/30(日) 05:07:43.82ID:1ALBmyOB AWKが巨大なテキストファイルを処理できないみたいな話を知ってる方いらしゃいますか。
大体1.4GiBくらいのファイルをAWKで編集しようとすると「ファイルの空きがない」みたいなエラーが出るので。
大体1.4GiBくらいのファイルをAWKで編集しようとすると「ファイルの空きがない」みたいなエラーが出るので。
942デフォルトの名無しさん
2019/06/30(日) 12:11:04.21ID:QU2Ls1X6 UNIXというかまともなPIPE実装されてるOSならそんなことはないが
WINDOWSとかいうアホなOSだと出るだろうね
WINDOWSとかいうアホなOSだと出るだろうね
943デフォルトの名無しさん
2019/06/30(日) 12:19:57.44ID:pDzbN/vc 「ファイルの空きがない」っていうメッセージは "No space left on device" の事?
944デフォルトの名無しさん
2019/06/30(日) 15:28:11.21ID:o/HVRPYj945デフォルトの名無しさん
2019/06/30(日) 21:02:48.49ID:1ALBmyOB >>942
なるほど。
なるほど。
946デフォルトの名無しさん
2019/06/30(日) 21:56:09.12ID:HbSturrb947デフォルトの名無しさん
2019/07/01(月) 01:34:15.60ID:2smzn43h948デフォルトの名無しさん
2019/07/01(月) 02:30:15.69ID:jjSXuURg なんだろうね。作業用ファイルが作られるパーティションの空きが足りないとかかな?
949デフォルトの名無しさん
2019/07/01(月) 02:35:44.08ID:KfVaWYci 64bit版か32bit版かで違わないか
1.4GBは入力で出力も同じなのかはるかに小さいのか
出力が速すぎることはないのか、ゆっくり出力するようにしたらどうか
1.4GBは入力で出力も同じなのかはるかに小さいのか
出力が速すぎることはないのか、ゆっくり出力するようにしたらどうか
950947
2019/07/01(月) 07:19:02.17ID:2smzn43h951デフォルトの名無しさん
2019/07/01(月) 07:38:04.28ID:O1pDJEnN Ruby でも、File.read なら、ファイルの内容を、メモリ内にすべて読み込んでしまうから、
500MB 以上なら、読み込めずにエラーになるだろう
File.foreach なら、メモリ内に、1行ずつ読み込んでは捨てるから、大きいファイルでも大丈夫
まあ、RubyVM 起動時に、そのアプリが使うメモリのサイズを、指定できると思うけど。
JavaVM には、そういうオプションがある
500MB 以上なら、読み込めずにエラーになるだろう
File.foreach なら、メモリ内に、1行ずつ読み込んでは捨てるから、大きいファイルでも大丈夫
まあ、RubyVM 起動時に、そのアプリが使うメモリのサイズを、指定できると思うけど。
JavaVM には、そういうオプションがある
952デフォルトの名無しさん
2019/07/02(火) 21:28:41.07ID:Stz7guhB awkで dateを使ったのですが、秒数が更新されず悩んでます。仕様とかそういう情報ご存知のかた教えて
頂けないでしょうか
■ コード
BEGIN {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +\"%Y/%m/%d %I:%M:%S\" " | getline datTmp
print "Start:" datTmp
system("sleep 2")
}
}
END {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +%I:%M:%S" | getline datTmp1
print "End:" datTmp1
system("sleep 2")
}
}
■ 結果
Start:2019/07/02 09:18:36
Start:2019/07/02 09:18:36
Start:2019/07/02 09:18:36
End:09:18:42
End:09:18:42
End:09:18:42
■ 疑問
Start, End 共に最初の 1 回目のみ秒数が取れているようで、2回目からは2秒後のはずなのに、秒数が変わっていない orz..
頂けないでしょうか
■ コード
BEGIN {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +\"%Y/%m/%d %I:%M:%S\" " | getline datTmp
print "Start:" datTmp
system("sleep 2")
}
}
END {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +%I:%M:%S" | getline datTmp1
print "End:" datTmp1
system("sleep 2")
}
}
■ 結果
Start:2019/07/02 09:18:36
Start:2019/07/02 09:18:36
Start:2019/07/02 09:18:36
End:09:18:42
End:09:18:42
End:09:18:42
■ 疑問
Start, End 共に最初の 1 回目のみ秒数が取れているようで、2回目からは2秒後のはずなのに、秒数が変わっていない orz..
953952
2019/07/02(火) 21:47:38.82ID:Stz7guhB お騒がせしました。自己解決しました。
https://stackoverflow.com/questions/2391272/gawk-awk-piping-date-to-getline-sometimes-wont-work
closeを使う必要が有ったようです。
■ コード
BEGIN {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +\"%Y/%m/%d %I:%M:%S\" " | getline datTmp
print "Start:" datTmp
system("sleep 2")
close("date +\"%Y/%m/%d %I:%M:%S\" ")
}
}
END {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +%I:%M:%S" | getline datTmp2
print "End:" datTmp2
system("sleep 2")
close("date +%I:%M:%S")
}
}
■ 結果
Start:2019/07/02 09:44:49
Start:2019/07/02 09:44:51
Start:2019/07/02 09:44:53
End:09:44:55
End:09:44:57
End:09:44:59
https://stackoverflow.com/questions/2391272/gawk-awk-piping-date-to-getline-sometimes-wont-work
closeを使う必要が有ったようです。
■ コード
BEGIN {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +\"%Y/%m/%d %I:%M:%S\" " | getline datTmp
print "Start:" datTmp
system("sleep 2")
close("date +\"%Y/%m/%d %I:%M:%S\" ")
}
}
END {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +%I:%M:%S" | getline datTmp2
print "End:" datTmp2
system("sleep 2")
close("date +%I:%M:%S")
}
}
■ 結果
Start:2019/07/02 09:44:49
Start:2019/07/02 09:44:51
Start:2019/07/02 09:44:53
End:09:44:55
End:09:44:57
End:09:44:59
954デフォルトの名無しさん
2019/07/03(水) 06:22:07.32ID:IYY9eTuR gawkなら時間関数群あるんじゃ。
955デフォルトの名無しさん
2019/07/04(木) 01:05:04.08ID:vxwYTSOB ここいいね。Web上でawkの実行とその結果が見れるサービス。
https://www.tutorialspoint.com/execute_awk_online.php
https://www.tutorialspoint.com/execute_awk_online.php
956デフォルトの名無しさん
2019/07/05(金) 19:29:13.12ID:p9vBdDGq fi
、Jj
Й
/⌒ヽ
l_ 0..0
}{ l冊
-=-v=-
}{ 彡ミノ{
}{ 非 }{
匁OTO)匁
}{ }{
}{ }{
及 及
、Jj
Й
/⌒ヽ
l_ 0..0
}{ l冊
-=-v=-
}{ 彡ミノ{
}{ 非 }{
匁OTO)匁
}{ }{
}{ }{
及 及
957デフォルトの名無しさん
2019/08/05(月) 11:42:29.38ID:N86fIT/u Windows10 のコマンドプロンプトで awk を使いたいです。
vector で検索するといろいろでてくるのですが、
これがお勧めっていうのありますでしょうか。
日本語も扱えるのがいいです。
よろしくお願いします。
vector で検索するといろいろでてくるのですが、
これがお勧めっていうのありますでしょうか。
日本語も扱えるのがいいです。
よろしくお願いします。
958デフォルトの名無しさん
2019/08/05(月) 11:44:36.72ID:MNXFY7cg Windows 10なら、標準機能のWSL(+Ubuntu)をインストールするのが一般的
vectorとかもうあんなのいらない
vectorとかもうあんなのいらない
959デフォルトの名無しさん
2019/08/05(月) 12:04:58.85ID:N86fIT/u WSLって使ったことなかったんですけど、
ググってみたらもう Win で Linux が標準で使えるんですね。
これなら cygwin とかも、もういらないのかな。
情報どうもです。
ググってみたらもう Win で Linux が標準で使えるんですね。
これなら cygwin とかも、もういらないのかな。
情報どうもです。
960デフォルトの名無しさん
2019/08/05(月) 12:06:14.91ID:MNXFY7cg cygwinもいらない。遅いし互換性低いし
961デフォルトの名無しさん
2019/08/05(月) 12:06:57.54ID:NOA3rn3w WSL って pro だけ?
home だったら付いてない?
msys とか入れれば解決するけど
home だったら付いてない?
msys とか入れれば解決するけど
962デフォルトの名無しさん
2019/08/05(月) 12:18:30.48ID:N86fIT/u マイクロソフトもビルゲイツがいなくなって
多少は良い事もするようになったかな。
多少は良い事もするようになったかな。
963デフォルトの名無しさん
2019/08/05(月) 12:33:33.70ID:LhsszH09964デフォルトの名無しさん
2019/08/05(月) 12:42:57.45ID:MNXFY7cg WSLはhomeでも使える。WSL2も使えるようにすると発表があった。
965デフォルトの名無しさん
2019/08/05(月) 12:59:49.23ID:MNXFY7cg >>963
> 何でもかんでもWindowsの上で動くようにしているだけだしね。すると何を動かすにしてもWindowsのライセンス料が掛かる。
それがLinuxでも動くようになり、Windowsのライセンス料もかからなくなってきてるから
最近のMSの評判が抜群に上がってるんだろ
> 何でもかんでもWindowsの上で動くようにしているだけだしね。すると何を動かすにしてもWindowsのライセンス料が掛かる。
それがLinuxでも動くようになり、Windowsのライセンス料もかからなくなってきてるから
最近のMSの評判が抜群に上がってるんだろ
966デフォルトの名無しさん
2019/08/05(月) 15:30:49.20ID:VYzH3PNA967デフォルトの名無しさん
2019/08/05(月) 17:45:26.88ID:QFC6lZK5 いっそのこと UNIX のカーネルに Windows のシェルを
被せてもらいたいですね。
Mac はもうそうなってるし。
被せてもらいたいですね。
Mac はもうそうなってるし。
968デフォルトの名無しさん
2019/08/05(月) 17:59:46.21ID:MNXFY7cg そのわりに、MacってUNIXを全然活かせてないよな?
forkは遅いし、仮想マシン使ったほうがMacよりも速いし。
forkは遅いし、仮想マシン使ったほうがMacよりも速いし。
969デフォルトの名無しさん
2019/08/05(月) 18:09:58.23ID:MNXFY7cg まあ、AppleはUNIXを真似ることしかできなかったわけで
UNIXと双璧をなす独自OSを作り上げたMSと同じことをしろというのも酷な話だが、
UNIX/Linuxを取り込むなら、WSLと同じ仕組みで十分な気がする。
あとAppleが運が悪かったのは、Linuxがここまで普及すると予測できなかったことかな
BSD系を採用しちゃったので、Linuxとコマンド体系が微妙に変わってしまった。
標準でUnixコマンドが搭載されてるにも関わらず、サードパーティのHomebrewを使って
Linux互換(GNU版)のコマンドに置き換える人も多いし。
UNIXと双璧をなす独自OSを作り上げたMSと同じことをしろというのも酷な話だが、
UNIX/Linuxを取り込むなら、WSLと同じ仕組みで十分な気がする。
あとAppleが運が悪かったのは、Linuxがここまで普及すると予測できなかったことかな
BSD系を採用しちゃったので、Linuxとコマンド体系が微妙に変わってしまった。
標準でUnixコマンドが搭載されてるにも関わらず、サードパーティのHomebrewを使って
Linux互換(GNU版)のコマンドに置き換える人も多いし。
970デフォルトの名無しさん
2019/08/05(月) 20:09:15.04ID:oBMYP5f0 > UNIXと双璧をなす独自OSを作り上げたMS
ゴミをでっち上げ、OSとかよく解らない池沼層に売っただけ。
ゴミをでっち上げ、OSとかよく解らない池沼層に売っただけ。
971デフォルトの名無しさん
2019/08/05(月) 20:51:07.86ID:LhsszH09 MSはOSというよりはUIを作った感じだな。
972デフォルトの名無しさん
2019/08/05(月) 21:05:19.12ID:MNXFY7cg >>970
嫉妬すんなよw 事実は受け入れようぜw
嫉妬すんなよw 事実は受け入れようぜw
973デフォルトの名無しさん
2019/08/05(月) 21:12:10.12ID:O6CFE/yb マクドナルドのハンバーガー並に普及した
974デフォルトの名無しさん
2019/08/05(月) 22:10:04.48ID:o5dspg/Y macOSの前身のNEXTSTEPは技術的には絶賛されてた
macOSは中身ほぼNEXTSTEPで見た目をモダンにしただけだ
macOSは中身ほぼNEXTSTEPで見た目をモダンにしただけだ
975デフォルトの名無しさん
2019/08/06(火) 14:52:58.06ID:SvihPrAV マルチユーザーマルチスレッドωωω
976デフォルトの名無しさん
2019/08/06(火) 17:42:44.33ID:9obbnMlM > macOSの前身のNEXTSTEPは技術的には絶賛されてた
でもUNIXの割にforkが遅いんだよな
cygwin使ってるのか?って思っちゃうぐらい。
でもUNIXの割にforkが遅いんだよな
cygwin使ってるのか?って思っちゃうぐらい。
977デフォルトの名無しさん
2019/08/06(火) 20:48:47.73ID:ePqW8mte スレッドも遅いの?
978デフォルトの名無しさん
2019/08/07(水) 00:04:17.07ID:NEAc+E18979デフォルトの名無しさん
2019/08/07(水) 00:33:23.13ID:WK8NJ3/V でもそうするとWSLで十分じゃね?という話になる
980デフォルトの名無しさん
2019/08/07(水) 01:24:29.79ID:NRK0ob+d 新手のスレ埋め立てかw
981デフォルトの名無しさん
2019/08/07(水) 04:38:27.64ID:/UJIAec/ >>969
そんなこと気にする人ってどれくらい居るんだろう
CPUですら68、PowerPC、x86と変えてきて
OSは独自、BSDと来たもんだ
多くの人は中身を気にせず使ってるのに
自分は元マカーだけど今は1台も持ってない
でもファッションでMacBookいいカナと思うよ
仕事はITのエンジニアで商用UNIX使ってるけど
コマンドなんてどうでもいいわ
好きなところにログインすれば言いだけなんだから
そんなこと気にする人ってどれくらい居るんだろう
CPUですら68、PowerPC、x86と変えてきて
OSは独自、BSDと来たもんだ
多くの人は中身を気にせず使ってるのに
自分は元マカーだけど今は1台も持ってない
でもファッションでMacBookいいカナと思うよ
仕事はITのエンジニアで商用UNIX使ってるけど
コマンドなんてどうでもいいわ
好きなところにログインすれば言いだけなんだから
982デフォルトの名無しさん
2019/08/08(木) 01:24:30.39ID:X/CTiqlR | awk -F: '! /BINARY/ {print $1}'\
正規表現無しの簡潔な部分はperl -lane より短くて最高
正規表現無しの簡潔な部分はperl -lane より短くて最高
983デフォルトの名無しさん
2020/08/02(日) 11:03:40.06ID:mglN/rTr984デフォルトの名無しさん
2020/08/02(日) 17:25:58.24ID:IlYSPDQE ファッションでというと、写真撮影しているオシャレな感じのスタジオの受け付けにマックがあったのだが画面を見るとWindowsだったというのを見たことがあるな。
エミュでWindows動かしてそこで業務用のソフト動かして受け付け業務に使っているということだが、客から見るとディスプレイの裏側が主に見えるのでAppleマークが見えると。
エミュでWindows動かしてそこで業務用のソフト動かして受け付け業務に使っているということだが、客から見るとディスプレイの裏側が主に見えるのでAppleマークが見えると。
985デフォルトの名無しさん
2020/08/02(日) 19:24:52.35ID:mglN/rTr >>984
誤爆?
誤爆?
987デフォルトの名無しさん
2020/08/03(月) 09:51:55.82ID:3aFKjSal Aho
988デフォルトの名無しさん
2020/08/03(月) 10:16:40.93ID:ZKD4yCvc AWmae no Kachan debeso
989デフォルトの名無しさん
2020/08/03(月) 20:08:52.49ID:iGTWfWuc awk の a は本当に Aho の略(人名)
990デフォルトの名無しさん
2020/08/10(月) 14:00:21.38ID:l5zwQhnu991デフォルトの名無しさん
2020/08/10(月) 14:01:04.64ID:l5zwQhnu 即レスも大概だが亀レスも大概やな!
992デフォルトの名無しさん
2020/08/10(月) 22:16:10.09ID:DZgybkpe AWesome Kame res
993デフォルトの名無しさん
2020/08/13(木) 10:26:07.54ID:uwSNr/lm 真のawkerは多くを語らない。
awkを語らない…ナンチャッテ!
awkを語らない…ナンチャッテ!
994デフォルトの名無しさん
2020/08/13(木) 16:09:43.86ID:GqR68DDy は?
995デフォルトの名無しさん
2020/08/14(金) 13:41:25.37ID:H4TUvcZb 【審議中】
∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
996デフォルトの名無しさん
2020/08/14(金) 15:50:04.19ID:XKPWE/tl997デフォルトの名無しさん
2020/09/14(月) 11:09:07.94ID:c+iGp9gS bashで小数点の比較をする方法にbcを使うという意見が多かった
けどawkの方がわかりやすいと思う
condition()
{
awk 'BEGIN { exit ! ('"$*"') }'
}
x=5.6; y=42.1
if condition "$x < $y"; then
echo true
else
echo false
fi
けどawkの方がわかりやすいと思う
condition()
{
awk 'BEGIN { exit ! ('"$*"') }'
}
x=5.6; y=42.1
if condition "$x < $y"; then
echo true
else
echo false
fi
998デフォルトの名無しさん
2020/09/14(月) 11:15:45.20ID:S/jhW9z+ bcはインストールされてないことが時々あるんで使わないね
まあその点はawkの方がマシだろう
まあその点はawkの方がマシだろう
999デフォルトの名無しさん
2020/09/14(月) 12:03:30.66ID:gMM3Z1ji 梅
1000デフォルトの名無しさん
2020/09/14(月) 12:08:39.52ID:H3Bos02D Aho Weinberger Kernighan
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 4951日 12時間 12分 57秒
新しいスレッドを立ててください。
life time: 4951日 12時間 12分 57秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【京都】赤いポルシェが市営バスと正面衝突…バス乗客の女性が負傷 ポルシェを運転の24歳男を逮捕 酒気帯び運転などの容疑 [シャチ★]
- 神奈川県警に「救えた命ではなかったか」報ステ大越健介キャスター 川崎遺体遺棄で対応疑問視 [少考さん★]
- 年金だけじゃ暮らせない パートに深夜バイトで体は悲鳴…60代シングル女性の絶望「枠から外れた私は死んでもいいと思われているみたい」 [ぐれ★]
- 「ランチに行ってきます」→そのまま退職も!中堅社員困惑の「すぐに辞めてしまう新人」調査 [少考さん★]
- ブラジル人研究者「日本はとても安全な国。だから私はここに移住したい」 翌日、千葉県でスリランカ人に殺される ★2 [お断り★]
- 【徳島】2人乗りでヘルメットも着用せず 原付バイクが乗用車と衝突 女子高校生が意識不明の重体 [ぐれ★]
- 🏡
- 【実況】博衣こよりのえちえち星のカービィ64 100%耐久🧪★3
- ネトウヨ、未だに夫婦別姓がなぜだめなのか説明できないwww [244219136]
- 食品の乾燥機って便利?
- 暇空茜って今お嫁さん募集したら選び放題なのになんでオーディション開催しないの? [358382861]
- 【悲報】ワイの息子、ダメっぽい…勉強苦手、ルール守れない、叫び回る、一日中ゲームとYoutubeやってる…どう処分すればいいんだ? [257926174]