腐っても鯛? 騏も老いては駑馬に劣る?
三人の碩学が生み出したスクリプト言語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
■ このスレッドは過去ログ倉庫に格納されています
2007/02/23(金) 23:55:42
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
}
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】嵐、解散を発表!解散前にラストツアーも開催予定 [Ailuropoda melanoleuca★]
- 【速報】嵐、解散を発表!解散前にラストツアーも開催予定 ★2 [Ailuropoda melanoleuca★]
- 嵐、来年春に行うツアーをもって活動終了 [少考さん★]
- 【新型コロナ】今もコロナ後遺症と闘う19歳 移動、食事、排泄、入浴など手を借りなければ… 周囲の無理解、支援受けられぬ例も [ぐれ★]
- イギリス、反移民を掲げる右派ポピュリスト政党が1600議席中677議席の大躍進―英地方議会選 [お断り★]
- 【京都】赤いポルシェが市営バスと正面衝突…バス乗客の女性が負傷 ポルシェを運転の24歳男を逮捕 酒気帯び運転などの容疑 [シャチ★]
- 🏡ビビンバー🖐🏿😲🖐🏿ハウス🏡
- 💩🏡クソ濡れのお🏡💩
- 駐英日本大使、炎上 イギリス人「ギャー、クランペットにバターつけずジャムを塗っているうううう」 石破茂の任命責任 [175344491]
- 【悲報】大阪万博、閉園までまだ2時間以上あるのにガラガラ、帰宅してる客すら少ない🥹 [616817505]
- 【石破速報】神奈川県警、ストーカー事件でまた嘘をついてたのが判明 [931948549]
- 【悲報】AIエンジニア「親の介護のために地方(広島?)に戻ったら、ITの仕事が家電量販店のスマホ販売員しかなかった…終わりだよ… [257926174]