1 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:55:42 .net] 腐っても鯛? 騏も老いては駑馬に劣る? 三人の碩学が生み出したスクリプト言語AWKについて語るスレ ◆ 前スレ awkについて語るスレ pc10.2ch.net/test/read.cgi/tech/1023556171/ ◆ 関係スレ シェルスクリプト相談室 pc10.2ch.net/test/read.cgi/tech/1112553783/ AWKでCGI pc10.2ch.net/test/read.cgi/php/1171804314/ 【sed】シェルスクリプト総合@LINUX Part2【awk】 pc10.2ch.net/test/read.cgi/linux/1154578200/ ◆ 参考 The AWK Programming Language (Brian Kernighan): ttp://cm.bell-labs.com/cm/cs/awkbook/index.html GAWK (GNU Projedt): ttp://www.gnu.org/software/gawk/
433 名前:デフォルトの名無しさん mailto:sage [2010/12/28(火) 15:24:21 .net] >>426 awk大好きなオイラに喧嘩売るのかw ウニックス文化最高!(NT系はUNIXのパクリ)
434 名前:デフォルトの名無しさん mailto:sage [2010/12/28(火) 15:28:13 .net] >>427 全角英字使う奴が awk 大好きだとは到底思えん
435 名前:デフォルトの名無しさん mailto:sage [2011/01/05(水) 23:22:55 .net] まあ冬休み期間だものね。
436 名前:デフォルトの名無しさん mailto:sage [2011/01/06(木) 00:22:04 .net] ▼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" という代入を本編(?)でも有効にする為 にはどうすればいいでしょうか?
437 名前:デフォルトの名無しさん mailto:sage [2011/01/06(木) 00:31:45 .net] なにもしなくても有効だと思うんだけど 質問の趣旨がわからん
438 名前:430 mailto:sage [2011/01/06(木) 06:20:53 .net] 分かり辛くてすみません。 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 '・' は不正です。
439 名前:デフォルトの名無しさん mailto:sage [2011/01/06(木) 08:57:49 .net] 入力レコードが1件も無いからでしょ >gawk: tes09.awk:2: ^ 表現の char '・' は不正です。 これは全角スペース
440 名前:デフォルトの名無しさん mailto:sage [2011/01/06(木) 09:12:00 .net] >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 } としてやれば明らか
441 名前:デフォルトの名無しさん [2011/01/06(木) 13:46:53 .net] 質問の趣旨は、プログラム(スクリプト)の中で入力ファイル等の コマンドライン引数を追加したいという事ですか。 コマンドライン引数の配列は ARGV ですが、コマンドライン引数の 個数を格納する ARGC という組み込み変数があります。 ARGV配列を追加したら一緒に ARGC を修正してあげないと、awkは配列が 追加された事を認識しません。 BEGIN内でARGV配列を追加した分だけARGCをインクルメントしてあげれば 追加されたARGV配列で指定されたファイルも本文の処理に渡されます。 蛇足としては、 現在処理中のファイル名が格納されている配列 ARGV のインデックスを 示す組み込み変数は ARGIND です。 私のは Win版の gawkm115 です。スクリプト内でARGV/ARGCを操作しても 期待通り正常に動きますよ。 試してみてね。
442 名前:430 mailto:sage [2011/01/06(木) 23:56:01 .net] 皆様レスありがとうございます。 >>433 >これは全角スペース お恥ずかしい限りです(汗) 出勤前に思いつきで試したもので、スレ用に書いた 物をそのままコピってました・・・ >>434 BEGIN句のgetlineではARGV[1]への代入ができているのに、本文では有効に ならないという事を伝えたかったのです。
443 名前:430 mailto:sage [2011/01/06(木) 23:56:17 .net] >>435 自分の質問を見直してみると全く質問になっていなかったにも関わらずエスパー してくださってありがとうございます。 ARGCについて理解できました。 BEGIN{ ARGV[1]="hoge.txt" ARGC=2 } ARGV[1]=="hoge.txt"{ print "BODY\t"$0 } こんな感じで意図した通りに出力されました。 おかげさまで今までawkの補助としてshを使ってましたが、awkだけで書ける事が 多くなりました。 引数にワイルドカードを指定して、ARGIND で特定パターンのファイル名の 物のみ処理をするとかできそうですね。
444 名前:デフォルトの名無しさん mailto:sage [2011/01/09(日) 22:38:39 .net] 質問です。 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せずに実行することは可能でしょうか?
445 名前:デフォルトの名無しさん mailto:sage [2011/01/09(日) 22:54:33 .net] system関数で出来るんでは?winは分からないけど
446 名前:デフォルトの名無しさん mailto:sage [2011/01/09(日) 23:06:13 .net] system("cd \"My Documents\" year "\" month "\" date day); とかではだめでした。
447 名前:デフォルトの名無しさん mailto:sage [2011/01/10(月) 03:54:21 .net] >440 なんか " と \ の数がおかしくね? My Documents\2011\01\09(日) ↓ "My Documents\\2011\\01\\09(日)" ↓ "My Documents\\" year "\\" month "\\" date day だよな?
448 名前:デフォルトの名無しさん mailto:sage [2011/01/10(月) 11:42:11 .net] アドバイスありがとうございます。 はい。 \はおっしゃるとおりですが、依然としてだめです。 today.batをコマンドプロンプトから実行すると、 printしてそのtmp.batを実行する438のパターンだと、 ちゃんとcdできて、今日のフォルダに移動するのですが、 system("cd \\"My Documents\\" year "\\" month "\\" date day); だと、移動せずに終了してしまいます。 なんでだろーな。
449 名前:デフォルトの名無しさん mailto:sage [2011/01/10(月) 12:32:20 .net] cygwinを入れてやってみた systemはshで動くっぽいので rm /cygdrive/c/Documents\ and\ Settings/test.txt みたいに書くとちゃんと消えるみたい
450 名前:デフォルトの名無しさん mailto:sage [2011/01/10(月) 13:24:47 .net] >>438 ,442 438で書いてるgawkでやりたいことってのはバッチファイルでやってるのと同じこと? だったら無理。 system() でcdしてもsystem()から返ってきたところで元に戻る。
451 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 01:15:49 .net] どうせ糞nixツールだから日本語や空白はダメなんだろ
452 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 09:05:01 .net] >>444 なるほど。gawk内部ではシステムを実行していても、gawkを出ると、それも終わっちゃうんですね。なるほど。 よくわかりました。ありがとうございます。
453 名前:デフォルトの名無しさん mailto:sage [2011/01/19(水) 02:44:33 .net] とりあえずAWKで書いた巨大なスクリプトを、鯖で回し続けるのはやめてください。 非効率極まりない
454 名前:デフォルトの名無しさん mailto:sage [2011/01/19(水) 15:27:12 .net] それはその人に言って下さい
455 名前:デフォルトの名無しさん mailto:sage [2011/01/19(水) 21:03:10 .net] その場で使えるのがawkだけだったんです
456 名前:デフォルトの名無しさん [2011/01/19(水) 23:56:54 .net] 文字から文字コード取り出せないのが残念 逆はsprintf("%c", 0x41)とか出来るのにな
457 名前:430 mailto:sage [2011/01/20(木) 00:40:40 .net] >>447 効率のいいプログラムで書き直してやればいいじゃない。
458 名前:デフォルトの名無しさん mailto:sage [2011/01/20(木) 09:05:02 .net] >>450 つord.awk gawk付属のライブラリで、asciiの範囲の対応表作ってひくという 簡単な仕組み。
459 名前:デフォルトの名無しさん mailto:sage [2011/01/20(木) 23:49:13 .net] #!/bin/gawk --re-interval -f ↑のファイルを実行するとオプションが不正と言われて実行できないのですが コマンドラインのオプションで指定する以外にやり方はありますか?
460 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 05:12:58 .net] >>453 無理にawkスクリプトにせずに #!/bin/sh awk ' #awkコード ' っていうシェルスクリプトにしたらどうかな
461 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 08:45:02 .net] #!でインタプリタに渡す引数の扱いは実装依存だからな。 linuxだと空白を含んだ全ての文字列が一つの引数として 渡されるので、複数のオプションは渡せない。不便だけど そういうものなのであきらめてください。素直にシェルを 間に入れるのがいいと思うよ。
462 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 12:45:00 .net] gawk '$3!="*"' in.txt>out.txt という処理で、20GBぐらいのin.txtを数百MBぐらいにスリムアップしてます。 問題は、その処理を10本ほど並行に作業させているんですが topで見てみるとほとんどのgawkプロセスがsleepかstackedになっていて あんまりもりもり働いてくれません。IOが律速なのでしょうか? CPUもメモリも最大限積んでます。
463 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 12:50:02 .net] stacked -> stuckでした。すいません。
464 名前:デフォルトの名無しさん [2011/01/21(金) 13:26:09 .net] '$3!="*"' これって書き間違い?
465 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 13:47:33 .net] 削られるデータの例 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万行ぐらいあるようです。
466 名前:デフォルトの名無しさん [2011/01/21(金) 13:52:48 .net] スクリプトの中身は実際は違うわけね たぶん、データの格納場所がプログラム実行マシンと別のマシンの ディスクなんじゃないかな。 ネットワークがビジー状態だと思う。
467 名前:453 mailto:sage [2011/01/21(金) 16:09:37 .net] >454-455 ありがとうございました。 挙動を変える組み込み変数も無いようですね。
468 名前:デフォルトの名無しさん [2011/01/21(金) 16:47:10 .net] とりあえず df コマンドで作業ディレクトリと /var/tmp の空き領域が 確保されていることと、出力ファイルのサイズやタイムスタンプが徐々に 更新されていることを確認するくらいしかないんじゃないかな。 ローカルディスクでやればもっと早いと思うけど。
469 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 17:42:04 .net] >>460 なるほど。 xgridをつかって、2台のマシンで10本ずつほど並行してgawkを走らせておりました。 NFSをつかって5GBほどの(先ほどは20GBと書きましたが間違いです)in.txtの のデータを読み込んで、処理後のデータをout.txtに書き出しているので、 ネットワークビジーになってしまうというわけですね。 ネットワークの問題とは。。。 一応、エラーでこけることなく、しゅくしゅくと処理は進むので気にしないことにします。
470 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 17:44:39 .net] 2台のマシンで20本でした(10+11)。。。 一プロセスあたり5GBのファイルを読み込むので、ネットワークが悲鳴を上げていると。
471 名前:デフォルトの名無しさん mailto:sage [2011/01/24(月) 21:31:50 .net] 今年、gawkを大学で習って色々弄ってるんだけど、perlとかより自由度が低いと言われた。そんなに差があるの?
472 名前:デフォルトの名無しさん mailto:sage [2011/01/24(月) 21:46:54 .net] >>465 簡易言語として捉えるかツールとして捉えるかの違いじゃね〜 俺パールよりオークの方が好きだけど。
473 名前:デフォルトの名無しさん mailto:sage [2011/01/24(月) 22:19:29 .net] >>466 なるほど。まぁ、そんなに複雑なことをこなすスキルを持ち合わせてないからもう暫くawkで遊んでみるか。
474 名前:デフォルトの名無しさん mailto:sage [2011/01/24(月) 23:30:11 .net] 自由度というよりは機能が少ないじゃないのか?
475 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 05:02:06 .net] このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
476 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 11:23:33 .net] >>467 perlユーザはすべてをperlだけでやろうとする。C/C++/Javaも使うユーザはawkの方を好む。 C/C++/Javaに手を延ばすつもりならむしろawkのほうがいいよ。perlだと自己完結してしまうから。
477 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 16:02:25 .net] perlよりawkの方が速い事ってないじゃん。 今のawkの使い道はワンライナーをコマンドラインのパイプに混ぜる程度でしよ。 俺は、256倍本の長篇スクリプトをいくつか書いたけど、 当時はまだperlなんて使われてなかった。時代が違う。
478 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 18:11:52 .net] >>470 それは偏見だろ autoconfなどの非常に基本的なツールでもPerlが使われているし opensslのようにconfigureの(主にWindows用の)ポータビリティを上げるために Perlを利用しているものもある 言語の適性をわかった上で適材適所で使えばいいんだよ
479 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 21:08:21 .net] 日本国際賞 「米ベル研究所特別名誉技師のデニス・リッチー博士(69)と米グーグル社特別技師のケン・トンプソン博士(67)」 毎日jp - 毎日新聞のニュース・情報サイト mainichi.jp/select/science/news/m20110126k0000m040012000c.html
480 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 21:29:34 .net] >>471 >時代が違う。 時代と言う意味では、最近はデフォで Python が入っていたりするので Perl を使うなら Python を選んじゃうな。 あんまり速さを競う仕事をしていないのと、ワンライナーを書く事が 多いので、awk も絶賛大活躍しているけど。 Perl がフルセットの言語なら awk は DSL みたいな物で、個人的には awk の方が気安く書ける気がする。
481 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 21:57:07 .net] pythonは、コマンドラインで使いにくい。 -cで引数に一応コマンド渡せるけど、インデントの問題があるし、 perlの-pや-nみたいに標準入力のループ渡せないから。
482 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 22:04:34 .net] 質問させて下さい 次のようなテキストがあるとします 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 となって欲しい訳です。
483 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 22:18:47 .net] で今考えている方法としては substr($1,1,3) で姓を判定して 同じ姓なら、世帯を加算して行く 違う姓になったタイミングで1つ前の家の家計を print して さらに各出費を初期化する 次の行に移って同じ世帯なら加算 という感じでスクリプトを組みたいんですが根本的なところでやり方が不味いでしょうか?
484 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 22:34:21 .net] 連想配列とかじゃ駄目なのか? name[$1] += 1
485 名前:デフォルトの名無しさん mailto:sage [2011/01/26(水) 01:13:08 .net] >>476-477 全て連想配列に溜め込んで、 最後で一気に出力した方が良くないか? >>477 の方法だと、 出力を行う箇所が "姓が変わったとき" と "テキストが終わったとき" に分散してしまう。 { a = substr($1,1,3); b[a] += $2; c[a] += $3; d[a] += $4; e[a] += $5; } END { for (f in e) print f,b[f],c[f],d[f],e[f]; }
486 名前:デフォルトの名無しさん mailto:sage [2011/01/26(水) 20:18:53 .net] >>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 がベスト。
487 名前:474じゃないけど mailto:sage [2011/01/26(水) 21:22:28 .net] >>474 と全く同じ意見だわ。 業務で使う事が多いRHELは余計な物はほとんど入れてない。 Python、Perlがデフォで入ってる感じ。 昔、UNIXを扱ってた頃はPerlならデフォで入ってたので、覚えようとしたけど結局身につかず。 sh、sed、awkでがんばってた。
488 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 00:10:46 .net] >>480 デフォで入っているのが嬉しいのは、自分の環境だけでなく、他人の環境でも 使える事が保証されている事だよ。誰かに使ってもらう為のコードを書く時に、 パッケージの追加をお願いしなくて良いのはとても楽。特に、それが仕事で 使われている環境なら尚更。 サポートやトレーニングの仕事をした事がある人なら理解してもらえると思う。
489 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 03:47:36 .net] AWKは、NEC PC-9801のMS-DOSでもうごいた。AWK95.exeは、日本語に対応してない
490 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 05:04:18 .net] AWKの活躍する場面は、やっぱりテキスト処理だと思う。 そのちょっと複雑版として使うならPerlかな。 組み込みライブラリがテキスト処理に特化してるから。 Pythonは正規表現が言語に組み込まれてなかったりと テキスト処理は若干やりにくい印象が強い。 その分、テキスト処理以外なら結構使うけどね。
491 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 05:27:26 .net] >>482 ああ、それ分かるわ。業務マシンとして使う商用UNIX(HP-UX/Solaris/AIX)だと RubyどころかPython/Perlすらデフォじゃ入っていないし、そういった フリーソフトの類いは原則として一切インストール禁止という環境もある。 (Web/MailといったInternet系サーバは別ね。あくまで業務マシン限定の話。) だから商用UNIXユーザは、デフォで入っているツールに長けることになる。 やっぱり本物のUNIXプロを自称するのなら、python/rubyではなくsh/awkだし、 emacs/vimではなくvi、latexではなくroffを選ぶべきだよね。
492 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 06:50:40 .net] >>484 >Pythonは正規表現が言語に組み込まれてなかったりと へ?
493 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 07:07:12 .net] >>486 ん?言語には組み込まれてないだろ?ライブラリとして組み込まれてるだけで。 だから正規表現リテラルとか無いし、importなしには使えない。
494 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 07:10:47 .net] リテラルだと何か良いことあるの?
495 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 07:13:35 .net] 文字列かパターンか区別しやすい。
496 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 07:16:17 .net] あと、マッチングの表記が自然。
497 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 09:03:47 .net] >>485 Solaris はデフォで Perl も Python も入ってるよ もちろん入れない事も出来るけど
498 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 15:46:44 .net] >>491 それは簡易インストールで用途としてデスクトップあるいはインターネットサーバを 選択した場合の話じゃないのかな。基本システムにperl/pythonは含まれていないはず。 その簡易インストールも含めてデフォであるとするなら、Debianも同じ。 カテゴリでデスクトップを選べば「rubyもデフォ」でインストールされる。(RHLは知らん) 自分は余計な物は入れたくないから基本システムを選んでるけどね。 高可用性を要求される基幹業務システムの場合、自分はHP-UXを扱うケースが多いけど、 デフォでは基本システムを選び事前に設計したパッケージのみを追加するのが鉄則。 なぜならメーカのサポートが受けられない、あるいはあからさまに嫌な顔をされるから。 そんな環境だと、「真にデフォ」なsh/csh/sed/awkが大活躍していたりする。
499 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 17:06:59 .net] >>492 Solaris のデフォルトは "Entire Distribution" というパッケージのセットだよ。 インストーラーでデフォルトで選択されているのがこれだし、プリインストール されているのもこれに近いもの。そこには Perl も Python も入ってる。 インストールする際の選択肢で "Core System" を選べば Perl や Python は 入らなかったと思うけど、これをデフォルトと呼ぶのはちょっと無理があると思うわ。 それと、簡易インストールとかカテゴリでデスクトップとか真にデフォと言った物は Solaris には存在しない。Debian は知らん。
500 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 20:11:40 .net] Solaris2.6あたりのデフォでPerlは入ってた記憶がある。 15年くらい前のHP-UXだとPerlが入ってなかった記憶が。
501 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 00:42:19 .net] 俺もHP-UXメインだけどPerl入ってないわ
502 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 00:47:55 .net] 確かに、Solarisに慣れていてHP-UX使わされると使いにくいわー
503 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 07:33:12 .net] と言うわけで、UN*Xサーバ管理者の場合はawkを使えるようになっておけば間違いありませんね。
504 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 10:56:30 .net] 環境を選ばないサーバ管理だったら、sh,grep,sed,tr,cut,paste,sort,uniqあたりで。 nawkとgawkの仕様差が結構あるので、awkは使いにくい。
505 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 13:15:51 .net] こういう話題の時にSolarisとかHP-UXは出るのにAIXは出ないイメージ
506 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 13:40:55 .net] 日本男児ならHI-UX、特にHI-UX/WE2だろ。常識やね
507 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 14:15:09 .net] うむ
508 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 16:56:12 .net] いやここはedスクリプトで
509 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 18:47:15 .net] Solarisは、/usr/bin/awk /usr/bin/nawk /usr/xpg4/bin/awk 3つ別々なのが入ってた気がするな。 で、一番まともなのが3番目なので、よそから持ってきたスクリプトは、先頭の#!を 書き換えないといけないという、カオスな状態じゃなかっただろうか。
510 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 19:23:53 .net] >>503 自分アカウントのパスは真っ先に /usr/xpg4/bin/を持ってきてたわ。
511 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 19:25:17 .net] スクリプトを組む時はだいたい nawk を使う 他人のスクリプトを丸パクリする機会が無いのでカオスは感じた事が無い
512 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 19:32:53 .net] >>505 話の流れが>>497 >>498 なので、可搬性が問題なんだよ。
513 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 19:39:08 .net] ウチは RHEL と Solaris だけ考えれば良いから、awk で問題がある時は Perl か Python で済ますわ
514 名前:デフォルトの名無しさん mailto:sage [2011/01/30(日) 05:43:19 .net] #!/usr/bin/env [gn]*awk だろ常考
515 名前:デフォルトの名無しさん mailto:sage [2011/02/01(火) 10:39:45 .net] shebang行に /usr/bin/env 書くのってあんま良いと思えないんだよなあ 複数の引数の扱いとか、環境変数をそこまで信用して良いものなのかとか あと /usr/bin/ に env があることは本当に保証できるのかとか /bin/sh を書いたほうが良いんじゃないかって思ってしまう
516 名前:デフォルトの名無しさん mailto:sage [2011/02/01(火) 11:45:20 .net] この話題も定番だな。前スレの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によっててんでばらばら >なのであまりお勧めできないということだろうか。
517 名前:デフォルトの名無しさん mailto:sage [2011/02/02(水) 00:12:39 .net] ruby 界隈でも流行ってるな 意味も判らず「おまじない」と称して使ってるうちに 都市伝説化していくんだな
518 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 22:33:59 .net] なぜ gawk には tr が無いのだ tr("A-Z","A-Z")とかしたいぞ
519 名前:デフォルトの名無しさん mailto:sage [2011/02/04(金) 03:31:02 .net] つ Python
520 名前:デフォルトの名無しさん [2011/02/04(金) 09:10:06 .net] >>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)) } }
521 名前:デフォルトの名無しさん mailto:sage [2011/02/04(金) 09:20:39 .net] それだとtr('ab', 'ba')がうまくいかないんだよなぁ。
522 名前:デフォルトの名無しさん [2011/02/04(金) 09:54:40 .net] 同じ事じゃん
523 名前:デフォルトの名無しさん mailto:sage [2011/02/04(金) 19:22:21 .net] 汎用的に1つ作っとけばいいじゃん
524 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 20:23:34 .net] >514みたいなベタ打ちじゃなくて A-Zあ-ん こういう表記で置換する方法ある?
525 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 20:37:26 .net] >>518 tr 使えば?
526 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 03:05:39 .net] tr コマンドって環境によってマルチバイトの扱いが違わね?ウチの場合 Ubuntu10.04に入ってるtr(GNU coreutils)7.4はどうやら2文字扱いにしちゃうらしいが MacOSX10.5に入ってるtr(バージョン判らんがman見るとBSD系ぽい)は1文字扱いにしてくれた
527 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 05:00:06 .net] UNICODE = 文字数 mbcs = バイト数
528 名前:デフォルトの名無しさん mailto:sage [2011/02/07(月) 08:10:44 .net] んーと、どゆこと? gnome-terminalはユニコード設定のはずなんだが… 他にやらなきゃいけないことがあるってこと?
529 名前:デフォルトの名無しさん [2011/02/09(水) 23:11:37 .net] awk++使ってる人いる? awk.info/?doc/dsl/awkplusplus.html
530 名前:デフォルトの名無しさん mailto:sage [2011/02/10(木) 14:20:51 .net] 最近、awkの存在を知りました。 いろんな言語を触っては挫折・・・触っては挫折・・・を繰り返していました。 awkは何となくマスター出来そうな気がします。 これから頑張ります!! 256倍の本を今は読んでおります。
531 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 02:02:44 .net] 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が入った特殊配列みたいなのがあったらうれしいのだが。
532 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 07:22:58 .net] >>525 $iとか書けるし代入もできるから $1〜を保存しなくていいのなら、後半は for(i=1;i<=NF;i++){$i=a[i]} print と書けばちょっと短くなるな。
533 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 12:11:40 .net] >>526 なるほど、そうできるのか。ありがとう。