腐っても鯛? 騏も老いては駑馬に劣る?
三人の碩学が生み出したスクリプト言語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
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みたいな指数で表示されるの?
出力のとき丸めるから、ちゃんと計算できてるように見えるのかな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- キ...キャ...キャ...キャン...
- (´・ω・`)おはよ
- 【悲報】女さん「ハローワークで仕事を探してる3-40代の中年男性いるでしょ。あれ何?」 [483447288]
- お前ら、豪雪地帯に一回住んでみろよ。 朝から晩まで雪に振り回される生活で死にたくなるから☃ [891140289]
- ( ・᷄ὢ・᷅ )博士メロつき界隈
- シコシコシコ………ドピュッ!⇦これなに?
