awkについて語るスレ
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001たれ
NGNGしれんが、awkにはPerlに無いエレガントさがある。
その辺愛好する人の発言きぼんぬ
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG文法の具合と特徴すらわからーん
0004デフォルトの名無しさん
NGNGベル研謹製の本紹介ページでも見れ
http://cm.bell-labs.com/cm/cs/awkbook/
0005デフォルトの名無しさん
NGNGC言語の勉強に最適だと思いますよ。インタプリタだし。
ただし、正規表現と文字列型がないとやっていけなくなる罠。
素人にはお勧めできない。
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG漢字違うよ
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG今は
echo aaa | awk -f 〜.awk
ってやってるんだが、もっとスマートな方法ないんかね
0010デフォルトの名無しさん
NGNGGNU awk なら /dev/null は不要
0011デフォルトの名無しさん
NGNGaaa
ってことじゃないの?
0012デフォルトの名無しさん
NGNG001310
NGNGそーだったのか!
EOF
00149
NGNGtestdata000001
testdata000002
・・・
・・・
testdata009999
ってのつくるのに
===hoge.awk====
for(i=0;i<10000;i++)
{
printf("testdata00%04d\n",i);
}
===============
で
echo aaa | awk -f hoge.awk > output.dat
と実行してるがなんかダセェ・・・
0015デフォルトの名無しさん
NGNGしかし10行程度の修正だと
手で打った方が早かったりする罠
0016デフォルトの名無しさん
NGNG% for i in `seq 0 10`; do printf "aaa%3d\n" $i; done > file
こんなのとかダメ?
# zsh だけど他のは知らん
001716
NGNGでも zsh ならもっと簡単なのが多分ある。。
0018デフォルトの名無しさん
NGNGprintf "testdata00%04d\n" {0..9999} > output.dat
0019デフォルトの名無しさん
NGNG教えてエロい人!
0020たれ
NGNGちなみに入力ファイルなしのときは、すべてをBEGIN{}のパートに
入れてしまう。
0021たれ
NGNGので助かってるが、トッパンがつぶれて以後マトモな教科書ってある
んだろうか。
0022デフォルトの名無しさん
NGNG0023るびきち
NGNG0024デフォルトの名無しさん
NGNGAWKの教科書なんて、man awkで十分だよ。
002524
NGNGWindowsだと、ファイル1つでやれるから楽チン。
0026デフォルトの名無しさん
NGNG『プログラミング言語AWK』
発行 株式会社シイエム・シイ 出版部
発売 シーブック24ドットコム株式会社
ISBN4-901280-40-6
C3055 \3300E
を買ったよ。買ったのは、ラオコンだったかな。あとは、
オライリー・ジャパン『sed & awkプログラミング』
ISBN4-900900-58-3
だな。
ASCII『AWKを256倍使うための本』
ISBN4-7561-0612-3
C3055 \1165E
というのもまだ買えるね。
トッパン潰れたのか。良書を結構出してたと思ったが。
良書なんか出してたらダメなんだろうな、今の時代。
0027たれ
NGNGまぁたしかにAho先生も制作者に入ってるわけだが( ・・)/
0028たれ
NGNGトッパンが出してた本の再販ができたのはめでたいことではある。
ASCIIの256倍ははっきり言って裏技集に近いので、初心者には
お薦めできない。
しかし、漏れは大学の研究室に入るなりsedと正規表現の特訓を受けたので
awkもどうにか使えてるが、今時の若いもんはどうしてるんだろう。
0029デフォルトの名無しさん
NGNGコマンド組み合わせるより Perl 使っちゃった方が手っ取り早い。
sh の構文覚えるのがちょっと大変なんだよね。
空白一つでエラーになったりするのが。
0030デフォルトの名無しさん
NGNG何か意義を見いださないと使おうっていう気には・・
0031デフォルトの名無しさん
NGNG軽い。用途に合わせて適切に道具を選ぶのがカッコイイ。
0032デフォルトの名無しさん
NGNG今日、旧式SUNの不具合見に行ったら、
ディスク使用量をみるにもdu/lsがサイズでソートできない。
Perlもlessもないって状況。
du -k | awk '{printf("%08d %s\n", $1, $2);}'|sort
こんな風にしてメールスプールの使用量のでかいユーザーの
順位表を作ってきた。
GNUツールなしのSUNとかってまだまだある。
0033デフォルトの名無しさん
NGNGそういや最近の Solaris も /opt/fsw /opt/gnu はオプションインストールだしね。
0034たれ
NGNG漏れの場合、「awkを覚えた後になってPerlが登場した」てのが一番でかいな。
Perlが最初に出てきたときに見て、「これならawkでも十分」と考えて以降Perlを
使ったことがない。CGIとかいじる仕事でもしてれば別だったかもしれんが。
0035デフォルトの名無しさん
NGNGPerlやRubyはフロッピー一枚では持ち歩けないがawkでは可能って
ことがある。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNGawk聖書を知らないのか?
0038デフォルトの名無しさん
NGNG初心者は裏技から入る
0039デフォルトの名無しさん
NGNG0040たれ
NGNGしかしawkを覚えてもcは使えないと言う罠
おまけにあらゆる事をawkで済ましてしまうのでタダでさえ知らないcを
さらに忘れてしまうという
0041AWK猫。
NGNG言ったせいでPerlを覚えてくれない。はっきり言って
仕事に支障が出ている。済まなかった。反省している。
だからそろそろPerlを覚えて欲しい。ver.4.36で構わな
い。頼む。
0042デフォルトの名無しさん
NGNGPerlを覚えたらawkなんて覚える必要はないよね?
0043デフォルトの名無しさん
NGNG0044shige
NGNG/´  ̄`ヽ,
/ 〃 _,ァ---‐一ヘヽ
i /´ リ}
| 〉. ‐- -‐ {!
| | ー・‐ く‐・‐|
ヤヽリ ´゚ ,r "_,,>、 ゚i
ヽ_」 ト‐=‐ァ' ! / ̄ ̄ ̄ ̄ ̄ ̄ ̄
ゝ i、 ``二´' 丿 < Rubyさいこー
r|、` '' ー--‐f´ \_______
_/ | \ /|\_
/ ̄/ | /`又´\| |  ̄\
0045デフォルトの名無しさん
NGNGフロッピー一枚持って外出すればどこででも
使えるawk。
対して
ダウンロードして環境変数を
設定せにゃならんPerlは他人のPCを借りて
使う場合にめんどくさい。
MSインストーラ版だとレジストリも汚染される。
0046shige
NGNGゝ、,,_ . . . . . , ./;::::;;;;;;;;/ ,,i/'''""""''''‐- 、ヾi ;;;;;;;;;;;;;;;;;;ヾ;;;;;;;;;;;;;;;;;;;i;;;;;;;;;;;;;i;;;;:::::ヽ;;;;;;;;;;::::::;;;;i
/. . . . "''''''':":":~i ;;;::l::;;;;;;;/ ," @ ヽ、 ;;;;;;;;;;;;;;;;;;;ヾ、;;;;;;;;;;;;;iヾi;;;;;;;;;i;;;;;;:::::ヽ;;;;;;;;;:;:::;;;;i
ヽ. . . . . . . . : : : : : :i ;;:il::;;;;;;i ゝ、,,,,,,,____ ヽ ;;;;;;;;;;; ヾ、;;;;;i i;;;;;;;i;;;;;;;;:::::ヽ;;;;;;;;;;;:;;;;i
´"ヽ. . . : : : : : : : i ;;;i i:;;;;;;i ,,,,;;;;;;;;;;;;;;;;;~""''‐---‐" _、-- 、 "゙' l.i;;;;;;i;;;;;;;;;:::::i i;;;;;;;;;;;;;;;;i
=-''''""~~ヽ___..,,-‐''ヾ";;;;i i;;;;;;i,,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,,, ",, @ ~"' 、 !;;i;;;;;i;;;;;;;;;;:::::i i;;;;;;;;;;;;/
/:::;;i ヽ";;;;;;ヾ;;;;,i ヽ、i;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;, ~"''〜、,,_,,) .i;;i;;;/;;;;;;;;;;;::::i .i;;;;;;;;;;/
/::;;;;; i ヾ;;;;;;/ヽ、;i ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; i;i;/、;;;;;;;;;;;;::/ i;;;;;;;;/
r"、;;;;;;/ヽ "''i ` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; r--、_ ;;;;;;;;;;;; /、,,ヾ;;;;;;;;;/ /;/
i' ;;;; i ;;i::;;;;;i゙ヽ、__ヽ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; i:::::::::::) ;;;;;;;;;;;;;;;;;;;; ヽ;;;i;;;;;;;/ヾ/
/! ;;;;; i..;i:;;;;;i:i;;;;;;;;;i_、' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. i::::::::/ ;;;;;;;;;;;;;;;;;;;;;;; !;/;/ ヾ
/.i ;;;;;;;; i.i:;;;;i::i::;;;;;;;;;i ヽ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; i:::::/ ;;;;;;;;;;;;;;;;;;;;;;;; i rヽ ヾ
ヽ i';;;i ;;;;;;;;; i'""i:::i::::;;;;;;;i、 ヽ ;;;;;;;;;;;;;;;;;;;;;;. ゝ" ;;;;;;;;;;;;;;;;;;;;;; ,' i' ;;; i ヾ::,r-
;;;;ヽ,r'i, ;;;;;;; i i:::ヽ:::::;;;;ヽ `i'‐、 ;;;;;;;;;;;;;;;;; ,,x' i' ;;;;;; i /;;;;
;;;;;;ヽ-' ;;;;;;;, i \ヽ:::::::::ヽ i l"'-、_ _,,,-_'" i ;;;;;;;; i /;;;;;; /
;;;;;;;;;;;;;;;;;;;;;;;; i \、::::::::ヽ ヽ "''-、_ _,,..-''" ,,;; /ヽ_i ;;;;;;;; i /;;;;;;;; /ヾ
0047デフォルトの名無しさん
NGNGその前にsedを使ってたのでperlの方がなじみやすかった
ということもある。
004847
NGNG2倍程度遅かったというのも awk をやらなかった理由の一つだったな。
今と違ってCPU性能が低いので割と大きな問題だった。
0049デフォルトの名無しさん
NGNGその勢いで Ruby から begin を無くして下さいな。
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNGむしろexcelでやるかどうか一瞬迷う方が多い。
0052shige
NGNG0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNGおお、くしょん。
なんて。
0055デフォルトの名無しさん
NGNG4,5人ならいいけど何十人分のwinマシンにperlのインストールなんか
やってらんない。
ちょっとしたフィルタがほしいときにCで作るとバイナリを配布することに
なるがawkならたんなるテキストなので気兼ねがいらない。
CVSでソースと一緒にしておけばみんなが勝手に更新するのでらくちん。
でも、こんな環境は特殊かも。
0056デフォルトの名無しさん
NGNGhttp://auctions.yahoo.co.jp/
0057デフォルトの名無しさん
NGNGおーくの友達
ttp://homepage2.nifty.com/mozu/winToy/winToy.html
copal
ttp://homepage1.nifty.com/kaityo/copal.html
clipsed
ttp://hp.vector.co.jp/authors/VA021567/
0058デフォルトの名無しさん
NGNG0059木村 キタキタマシーン
NGNGワラタ
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGオークでしょう。
0062デフォルトの名無しさん
NGNG0063たれ
NGNG0064デフォルトの名無しさん
NGNGawk の怪奇現象が起こるという。
その awk にはなにが潜んでいるのか。
0065デフォルトの名無しさん
NGNGPerlやRubyやPythonより簡単に書けるのでは?
ファイルをオープンして、読み込んで、って所を書かなくていいから。
0066デフォルトの名無しさん
NGNGCSVのように何たら区切りファイルなんかの扱いも楽だよね。
0067名無しさん@カラアゲうまうま
NGNG0068mu
NGNGファイルサーバ上のPerlを使うんだったら一台一台にインストールする必要は
ないぞもし。
0069shige
NGNG0070デフォルトの名無しさん
NGNG0071shige
NGNG0072デフォルトの名無しさん
NGNG何でもこれとシェルでパイプして片づけやがんの・・・・ (´д`;)
いや確かにそう言うものなんだけどさ
0073名無しさん@カラアゲうまうま
NGNG0074デフォルトの名無しさん
NGNG尊敬すべき old type だな。
0075デフォルトの名無しさん
NGNGそれで仕事が早くなるならいいね。
つーか、そうなりたい。
0076デフォルトの名無しさん
NGNG・ファイルAAAAAを使ってファイルBBBBBを作ってね。
制限時間1分
【AAAAA】
gksid
・・・
・・・
・・・
resdf
【BBBBB】
SELECT * FROM tableA WHERE id = 'gksid';
・・・
・・・
・・・
SELECT * FROM tableA WHERE id = 'resdf';
0077デフォルトの名無しさん
NGNGawk '{ printf("SELECT * FROM tableA WHERE id = '%s';\n",$1)}' AAAAA>BBBBB
0078名無しさん@カラアゲうまうま
NGNG0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG制限時間1分
【AAAAA】
gksid 13566
・・・
・・・
・・・
resdf 94564
【BBBBB】
SELECT * FROM tableA WHERE id = 'gksid' AND num = 13566;
・・・
・・・
・・・
SELECT * FROM tableA WHERE id = 'resdf' AND num = 94564;
0082デフォルトの名無しさん
NGNG>>77-78
0083デフォルトの名無しさん
NGNGperl -ane "printf \"SELECT * FROM tableA WHERE id = '%s' AND num = %s; \n\",@F" AAAAA>BBBBBB
0084デフォルトの名無しさん
NGNG008578
NGNGつーか>>78は;見落としてたよ。
0086デフォルトの名無しさん
NGNG制限時間1分
【AAAAA】
gksid
・・・
・・・
・・・
resdf
【BBBBB】
13566
・・・
・・・
・・・
94564
【CCCCC】
SELECT * FROM tableA WHERE id = 'gksid' AND num = 13566;
・・・
・・・
・・・
SELECT * FROM tableA WHERE id = 'resdf' AND num = 94564;
008778
NGNGsed "s/ /' AND num = /;s/^/SELECT * FROM tableA WHERE id = '/;s/$/;/" > CCCCC
つーか、宿題は宿題スレでやれ。ぼけなす。
0088デフォルトの名無しさん
NGNG0089awk初心者
NGNGawk 'BEGIN{FS=" "};{printf("SELECT * FROM tableA WHERE id = '%s' AND num = %s;\n",$1,$2)}' AAAAA > BBBB
0090デフォルトの名無しさん
NGNGFSは必要ないと思う。
ちなみにgawkだったら-Fオプションで指定できる。
0091デフォルトの名無しさん
NGNG入力レコード長が3000byteまでなんてビクーリしたよ
fieldは100までだっけ?
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNGperl使って欲しいから本貸してやったら
100ステップに20回位system使いやがる
オッサン(UNIX屋)
にオールド魂を見た!!! (鬱
0099デフォルトの名無しさん
NGNGURLと連番になる i は書き換えてね!!
頭に0を付加するのがミソです。
ぼくはこれをMeadowの中で実行して、できたURLをiriaに送っています。
BEGIN{
for( i = 1; i <= 100; i++ ) {
if ( i < 10 ) { i = "00" i }
else if ( i < 100 ) { i = "0" i }
print "http://hogehoge.com/hoge/images/gazou" i ".jpg"
}
}
0100デフォルトの名無しさん
NGNGawkは構文がようわからん。
i = "0" i って連結?
0101デフォルトの名無しさん
NGNGCとかで、
for(i = 1; i <= 100; i++)
printf("http://hogehoge.com/hoge/images/gazou%03d.jpg", i);
じゃ駄目なわけ?
0102デフォルトの名無しさん
NGNGコンパイルしなくても良いからじゃない?
まあ、awkでも printf 使った方が簡単だと思うけど。
010399(Awk初心者)
NGNG0104デフォルトの名無しさん
NGNGiriaに送るのになんでawkを使う必要があるんだ?
iriaでファイル展開できるだろ。。。
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG(do ((i 1)) ((> i 10))
(insert (format "http://hogehoge.com/hoge/images/gazou%d.jpg\n" i))
(setq i (1+ i)))
0108awk初心者
NGNGまあそうなんですけどね。
>>107
なるほど。elispは全然わからないんですが、
elispで書くとこうなるんですね。
頭に0を付けることまでやっているんでしょうか……。
しかし、この板の人は親切ですね。
0109デフォルトの名無しさん
NGNG> 頭に0を付けることまでやっているんでしょうか……。
ああ、それは忘れた。>101と見比べれば分かるだろ。
0110デフォルトの名無しさん
NGNGformatはlisp知ってないとわからんと思う。
0111デフォルトの名無しさん
NGNGそれに>107で使ってるformatの書式指定もprintfと同じだよ。
(do ((i 1)) ((> i 10))
(insert (format "http://hogehoge.com/hoge/images/gazou%.3d.jpg\n" i))
(setq i (1+ i)))
011299(Awk初心者)
NGNG連想配列は便利だね。
{count[$0] += 1}
END{
for( name in count )
print name, count[name]
}
0113デフォルトの名無しさん
NGNGさくっとやっつけるのがよいよね。
excelとか立ち上げないで、あくまでさくっと。
「えーっと」とかもいっちゃだめ。
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNGでもCSVって互換性とか無いよね。
エクセルの表をCSVで保存して、それをAWKでちゃんと
読みこめるかは、運だよね。
0119デフォルトの名無しさん
NGNG簡易解析につかっています。
実験装置のメーター数値を表示させるようなもんですか。
$1== "error" {a[i]=$0;i++}
として、最後に a を表形式で吐き出させています。
簡単使い捨てフィルターがさくさく作れるのはうれしいです。
大抵の環境にもありますしね。
もっとも複数ファイルを処理させるために
sh スクリプトとペアを組ませるのは必須ですけどね。
もっともフィールド数 99 では 2D 配列の計算には
大抵使えません。
awk は坂本文の本で知りました。今は man awk を時々
見て思い出します。
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGパタン−アクション型の構文が生きてこないので, そうすると
別のスクリプト言語でもいいなか, と思ってしまう ...
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNG同僚が、この最新のAwkというスクリプト言語は、
文字型の数値から本当の数値に自動的に変換されて凄いんだ、
と、そればかりを得意満面に別の同僚に話していました。
0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNG0129デフォルトの名無しさん
NGNG実装による
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNG/bin/awk
いつの日か
/bin/perlになる日がくる。
0137ま
NGNGvi と awk, sed です。後別途 sh スクリプト
やりました。
GUI 以外は、大抵これで用が済むように
なっています。
awk が知られていない。。。なんて時代に
なったとは。
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNG0141デフォルトの名無しさん
NGNGだから、zshの補完候補作る時にはperlは使われないが
awkは使われる。
0142デフォルトの名無しさん
NGNGgawk 'BEGIN { print _"hello, world" }'
might print bonjour, monde in France.
冗談だろうかと一瞬悩んだ。
0144デフォルトの名無しさん
NGNGgrep や sed、 各種コマンドと併用しないと,
使いもんになりましぇん。
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGprint "保守";
}
0147デフォルトの名無しさん
NGNGよく使うのはGNUのregexです。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNGsystem("echo " Data " >" OutoutFile);
とかよくやるしなー。
0151デフォルトの名無しさん
NGNGそこから進歩できなくなった人を知ってます。
0152デフォルトの名無しさん
NGNGawkとCの2次元配列は同じですか?
0153デフォルトの名無しさん
NGNGCやPerlのような本当の配列じゃないよね。
0154デフォルトの名無しさん
NGNGいちおう
#!/bin/awk -f
# tablemaker
# tekezo 11/21 1999
#
# オプション解析は awk のほうでやってくれるので、
# オプションは awk のそれと同じです。
# 例えば、$ tablemaker -F ','
# gawk ならば tablemaker -W copyleft なんてことも…。
BEGIN { print "<table border=\"1\">";}
{
print "<tr>";
for (i=1; i<=NF; ++i){
gsub(/&/,"\\&",$i); # こいつらが、for 文のなかに入っているのは、
gsub(/</,"\\<",$i); # セパレーターとして、"&" とかが指定された
gsub(/>/,"\\>",$i); # ときのことを考えて。
print "<td>" $i "</td>"; # TeX のおかげで実現性があるしね。
}
print "</tr>\n"; # 最後の改行は僕の趣味 :-)
}
END { print "</table>";}
#EOF
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNG出力先fileが一つだったら system() 使わなくても pipe でできるよね。
print Date | "cat > OutoutFile"
とか。
sh script の中から awk を呼んで、awk の中から pipe を使って
Unixコマンドを呼ぶ。非常にお奨め出来ない書き方だけど(w
0158デフォルトの名無しさん
NGNG>>157
それだけなら awk '{ print Data > "OutputFile" }' で、できるだろう。
もうちょい修行せよ。
> sh script の中から awk を呼んで、awk の中から pipe を使って
> Unixコマンドを呼ぶ。非常にお奨め出来ない書き方だけど(w
awk の中から pipe を使うんじゃなくて、awk の出力を pipe に繋ぐ
ようにするよな。その方が普通は効率的。
0159157
NGNGあ、ごめんごめん。思い出しながら書いてたのだが冗長だった。
「print Data > OutputFile としてもうまく行かないな」
と思っていじってるうちに、出力先を文字列にしないと駄目だ(当り前)
ということに気がついたんだけど、そのとき余計な pipe を入れてた。
>awk の中から pipe を使うんじゃなくて、awk の出力を pipe に繋ぐ
うむ。
0160デフォルトの名無しさん
NGNGダウンロードしたけどさっぱり…… (>o<)
0161デフォルトの名無しさん
NGNG初めて聞く。
オブジェクト指向のスクリプト言語なら
普通に Python や Ruby 使った方が情報多くて楽じゃない?
0162デフォルトの名無しさん
NGNGawkってプログラム言語に近いフィルターって感じだから、
しかもオブジェクト指向が使えるってあたりが。
0163デフォルトの名無しさん
NGNGオブジェクト指向とか拡張されてもありがたみが無かったり。
sedと合わせて、どの環境にでもある標準コマンドっぽいのが
一つの売りなんじゃないかなあ。
0164デフォルトの名無しさん
NGNGM$のOSには入って無いぞ
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG“OO”といいつつ、PHP レベルだったりすると萎え。
0167デフォルトの名無しさん
NGNG最近のWindowsには正規表現を扱えるスクリプトが標準でインストールされているが何か?
0168デフォルトの名無しさん
NGNG“標準でインストール”されていると“Winユーザでも使える”んですか?
0169デフォルトの名無しさん
NGNGユーザーに使える状態になっていることを
“インストール”されている
というのだが。
0170通りすがり
NGNG0171デフォルトの名無しさん
NGNG使わんけど。
0172のんべ
NGNGでしか指示できないのですか?日本語対応できる方法をご存知の方は教えて
下さい。
昔日本語対応でjgawkがあったのですが、ダウンロードサイトを見つけ
られません。滅びてしまったのだろうか?
0173デフォルトの名無しさん
NGNG「アウォック」って、いままで読んでた。
じゃ、sedは何て読むの?
「セッド」?「エスイーディー」?
0174デフォルトの名無しさん
NGNGセド
>>172
Debian にならgawk-ja パッケージにありますね。
http://packages.debian.or.jp/stable-jp/interpreters/gawk-ja.html.ja
で、Debian の人は「Download it!」をクリック、それ以外の人は
[orig.tar.gz] をクリックすれば、オリジナルのソース・パッケージが
得られます。
0175名無しさん@Emacs
NGNGSED == Super Extra Deluxe editor
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNGStream Editorだああああああああああああああああああああああああああ
0180デフォルトの名無しさん
NGNG同じじゃん、それが何か?
( ´�D`)ノ< これってどこにあるのれすか?
検索したのれすけど見つからないれすよ
0182デフォルトの名無しさん
NGNGって感じになりますね。 < Objective awk
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGBシェルスクリプト, sed, awk から勉強してたんだが
Perlに出会って以来全く使って無かった
昔を思い出してawk に出来る事はawkにさせるようにするよ
# 今じゃ既に文法すらあやしい...
0185デフォルトの名無しさん
NGNGObjective awk検索してみたけど見つからん。
どこにあるのか教えてください。
0186IP記録実験
NGNGhttp://qb.2ch.net/test/read.cgi/accuse/1042013605/
1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGう
こん
こうだよ
0189デフォルトの名無しさん
NGNG| {レヽ〈:::~``'' ´ ソ |! l } ミ. ミ ト
レヽ,;:::''''`':;|;il~,. -‐' ル )ノl / ミ ノr^,ヾ !
ゝ l;ュ=≡{., (;;,(ニ===、-.l! li /ソ ;;)|./
`!;ェ‐・オ ""'''< `・ーz'ー'~ |/ フ;;i |! <嫌だなあ・・・・
|:'""`')' ^ヽ;` ̄,. -‐'^ i|;;;;ノ/\ー-、-.,_
!;:.. .:;i| ;, ~、´ ,/ |,..ノ; \ ゝ ヽ``)、.,_
``ヽ(__,,,,...) \_,,..-' |;;; |〉 トli ヽ
|::::::::J..,,_ ^ヽ, : 1, ;!;: /l、 ) |
ヽ::r,―--一' . , il/::: :: / ! ; /
.//'i`ー-'´; ' ;. ',/;;;::::: .:::::∧ } ヽイ
/ / L.;_';_._,`.ノ
0190デフォルトの名無しさん
NGNGとの質問には
「今月10月分はもう支払いが済んでいますので大丈夫ですが、
もしも何かがあったなら、潰れてしまう」
とおっしゃっていました。
大阪大学大学院国際公共政策研究科
「2ちゃんねる」西村博之氏の講演
写真あり
http://www.dryamasaki.com/PhotoJ/2002/OSIPP2/p1.html
0191デフォルトの名無しさん
NGNGとの質問には
「今月10月分はもう支払いが済んでいますので大丈夫ですが、
もしも何かがあったなら、潰れてしまう」
とおっしゃっていました。
大阪大学大学院国際公共政策研究科
「2ちゃんねる」西村博之氏の講演
写真あり
http://www.dryamasaki.com/PhotoJ/2002/OSIPP2/p1.html
0192デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG漏れも「今から危険な領域に突入しようと(以下略」みたいなとこまでは
いったんだが…。気になるけど見たくない…。
0195デフォルトの名無しさん
NGNG先程、「天才」と呼ばれた
ディカブラットさまには頭を下げておきました。
皆さんが何を考えるか知りませんが
個人的に、
「結構ヤバイ」んです。
貴方方は気楽でしょうが。
末期がんに近い感じで追い詰められています(実際のクランケ御免なさい)
コレ、嘘じゃないのです
聞いて下さい
お願いします
0196デフォルトの名無しさん
NGNGまだなハズ
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGあるネット関連会社の社長は、
「いずれにしても2ちゃんねるは資金が底をつけば終わり。
あまり知られていないことだが、2ちゃんねる内部関係者によると今、
大手通信会社系が調査費名目で資金提供している。
だが、それが止まれば続けてはいけないだろう」
と証言する。
2ちゃんねるが判決によって力を失った場合、
資金提供の打ち切りも予想される。
http://ascii24.com/news/reading/causebooks/2002/07/01/636911-000.html
0199デフォルトの名無しさん
NGNG己
0200デフォルトの名無しさん
NGNG別に見られても困らないが
0201デフォルトの名無しさん
NGNGhttp://qb.2ch.net/test/read.cgi/accuse/1040063556/755
ここにも書いてきたけど、どの板だったか忘れるくらいあちこちの板に出没してます
0202デフォルトの名無しさん
NGNGないだろうかと物凄い偏った邪推してみるテスト。
0203デフォルトの名無しさん
NGNGお前にはがっかりした。
2chにも。さいなら。
0204デフォルトの名無しさん
NGNGなんてことしてくれたんだ、ばぼゆき・・・
0205デフォルトの名無しさん
NGNGtripodとかはアカウントを閉鎖しまくると思うが。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0208デフォルトの名無しさん
NGNG検索キーワードの一位が「2ちゃんねる」になる時代なんて
ネオ麦前には想像すらできなかった。
0209デフォルトの名無しさん
NGNG匿名掲示板の有意を潰してしまった。
0210デフォルトの名無しさん
NGNG雑談、学問、技術系な板には関係ないな。
0211デフォルトの名無しさん
NGNG↓
どこぞの団体が、管理人にスレ・レス作成IP教えろ
↓
管理人がIP教える
│
├─────┐
↓普通 ↓異常
裁判 VXガス
こうなるとオウムに個人情報を知らせ 大量殺人にまで発展した
TBSと同じになるな。 カルトは裁判を起こすことが目的ではなく
都合の悪い相手を特定して殺害することが
IPを得る真の狙いだから真実の書き込みができなくなる。
平和な日本の昼下がり、
創価学会脱税疑惑を追及した市議会議員が団地の自宅で家事をしている。
すると突然、化け物のような歪んだ力が襲い掛かり
自宅の窓からあっという間に空へ丸投げされて落下死する。
団地の部屋はコンビニへ買い物に行っているかのように
台所も洗濯物も何もかもがそのままの状態だ。
地元警察は創価学会と数日前から綿密な口裏合わせがあったかのように
他殺を自殺と決め付けてろくな捜査も現場検証もせず引き上げる。
http://www.sokamondai.to/
ちなみにフランス内務省は最高危険度カルト教団として
日本の創価学会を公式に認定した。
フランス政府公認のカルト教団と正義のために
たった一人実名で全面対決した市議に黙祷( ‐人‐ )
2ちゃねらーはプロバイダー責任法案を
国会で通過する前に反対しておけばよかったのに。
私は反対したが力が足りなかった。
0212デフォルトの名無しさん
NGNG俺はひろゆきにレスされたいんだよ!
0213デフォルトの名無しさん
NGNGリモートホストって、用語辞典に載ってないよ
誰かおせーて
0214デフォルトの名無しさん
NGNGclass Hoge {
public void BEGIN {
// ここがコンストラクタ
}
public void END {
// ここがデストラクタ
}
}
だったんですね。
それと、class の最後の } を }; とするとエラーとなってしまうんですね。
はまってしまった……
0215デフォルトの名無しさん
NGNGvoid は余計でしょ。Objective awk に型指定はできないよ。
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNGObjective awkってどこにあるんですか。URLを教えてください。おながいします。
0219デフォルトの名無しさん
NGNGモナーが出演決定!!!!!!!!!!!!!!!!!!!!!
<<放送時間>>
1/12
大阪 テレビ大阪 (日)9:30〜10:00
東京 テレビ東京 (日)9:30〜10:00
名古屋 テレビ愛知 (日)9:30〜10:00
福岡 TVQ九州放送 (日)9:30〜10:00
札幌 テレビ北海道 (日)9:30〜10:00
岡山・高松 テレビせとうち (日)9:30〜10:00
0220デフォルトの名無しさん
NGNGモナーが出演決定!!!!!!!!!!!!!!!!!!!!!
<<放送時間>>
1/12
大阪 テレビ大阪 (日)9:30〜10:00
東京 テレビ東京 (日)9:30〜10:00
名古屋 テレビ愛知 (日)9:30〜10:00
福岡 TVQ九州放送 (日)9:30〜10:00
札幌 テレビ北海道 (日)9:30〜10:00
岡山・高松 テレビせとうち (日)9:30〜10:00
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG0224山崎渉
NGNG0225デフォルトの名無しさん
NGNG0226山崎渉
NGNG0227デフォルトの名無しさん
NGNGObjective awk って、たしか http://hikita.org/netstation.html からたどって
ダウンロードできた気がする。
使ってないからようわからんけど。
0228山崎渉
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNGいまクローズド期間中らしいよ。
0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG自分で10進文字列に変換しないとだめ?
0234デフォルトの名無しさん
NGNGgawk なら、
gawk 'BEGIN {a = sprintf("%d", 0x12); print a}'
とかで変換できるね。
オリジナル awk や mawk だと、
gawk 'BEGIN {a = sprintf("%d", "0x12"); print a}'
だね。
0235デフォルトの名無しさん
NGNGこのスレでも名前挙がってるみたいだし.
Web ページに書いてあるように, 確かに配列は激速だった.
0236デフォルトの名無しさん
NGNGGNU Awk 3.1.2(Cygwin)を使用しています。
0237デフォルトの名無しさん
NGNG0238
NGNGActive AWK とか妄想してみる。
0239デフォルトの名無しさん
NGNGなぜそんなものを欲しがるんだ?
それ以前にWSHは別のプログラムの標準入出力を処理できないだろうが。
0240山崎渉
NGNG0241デフォルトの名無しさん
NGNG0242山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0243デフォルトの名無しさん
NGNGある文字列をコマンドに渡して、
その結果を受け取るような処理がしたいのですが。
print str | command
では、標準出力に書かれてしまいますし、
print str | command | getline s
このように書くと、
sh: 1: command not found
というエラーで、うまく動きませんでした。
0244デフォルトの名無しさん
NGNGnew Pipe("command"); print str | p | getline s;
だけど。
0245デフォルトの名無しさん
NGNGp = new Pipe("command"); print str | p | getline s;
0246動画直リン
NGNG0247243
NGNGせっかく教えてもらったのに悪いですが、
Objective Awkは入っていないみたいです。
これだけのために入れるのも考えものなので。。。
0248デフォルトの名無しさん
NGNG中間ファイルしかないかな。
print str > "/tmp/重複しない名前"
"/tmp/重複しない名前" | getline str
0249デフォルトの名無しさん
NGNGprint str > "/tmp/重複しない名前"
close("/tmp/重複しない名前")
"/tmp/重複しない名前" | getline str
close(""/tmp/重複しない名前")
0250
NGNGcygwin のやつ
http://www.vector.co.jp/soft/win95/util/se015007.html
http://www.eco.osakafu-u.ac.jp/~kazuhisa/awk.htm
0251デフォルトの名無しさん
NGNGhttp://gnuwin32.sourceforge.net/packages/gawk.htm
0252デフォルトの名無しさん
NGNGcmd = "echo " str " | command"
cmd | getline s
echoが無いとだめだが、
その程度ならすぐ書けるだろ。
BEGIN { for (i = 1; i < ARGC; i++) printf ARGV[i]; print "" }
0253
NGNGhttp://cl.aist-nara.ac.jp/~daiti-m/etc/awk/
0254
NGNGhttp://www.vector.co.jp/vpack/filearea/win95/util/text/awk/index.html
0255
NGNGhttp://www.hinadori.atnifty.com/~wills/program.html
これは?
0256
NGNG漏れは Copal + >>255 を使ってます。
ところで、Windows でも UNIX みたく #!/usr/bin/awk -f とかやりたいんですが。
つまりawkスクリプトをコマンドのように使いたいんですが。
0257デフォルトの名無しさん
NGNGCygwinでできるよ。Bashとかも使えておすすめ。
http://www.cygwin.com/
0258デフォルトの名無しさん
NGNGもしくは、hoge.awk 同名の hoge.bat を作って、
awk -f hoge.awk %1 %2 %3 %4 %5 %6 %7 %8 %9 %10
とか。
0259
NGNG>>257 cygwin は使ってます。便利ですよね。
またまた質問なんですが、
awk ですべてのパターンマッチングに際して
大文字と小文字を区別しないように
強制するオプションってありましたっけ?
grep における -i (--ignore-case) みたいな。
0260
NGNGこれってどの実装にも用意されているんだろうか。
POSIX 準拠?
0261
NGNGhttp://www.gnu.org/manual/gawk-3.1.1/html_node/POSIX-GNU.html
Version 2.10 of gawk introduced the following features:
The IGNORECASE variable and its effects (see Case Sensitivity in Matching).
ってことなので、これは POSIX では規定されていないみたい……ちょっと不安。
0262
NGNGhttp://www.gnu.org/manual/gawk-3.1.1/html_node/Case-sensitivity.html#Case-sensitivity
によると tolower はどの POSIX 互換 awk 処理系でも使えるということなんで、
tolower 使います。 では、皆さんよい週末を。
0263デフォルトの名無しさん
NGNGあとは、.awk の拡張子を awk.exe に関連付けして、start /b hoge.awk とかはできる。
もしかすると、PATHEXT に .AWK を加えると、単に hoge で起動するかも。
0264デフォルトの名無しさん
NGNGできるねえ。
0265デフォルトの名無しさん
NGNGすると hoge で起動できました。Windows 2000 でつ。
0266
NGNGども、ありがとうございます。
PATHEXT なんてのがあるんですねぇ……
0267動画直リン
NGNG0268
NGNG0269動画直リン
NGNG0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNG・空行があると、そこでレコードが区切られてしまう
・配列にレコードを納めるときに、画面に表示されてしまう
という二点がうまくいかず、悩んでいます。
分かる方、お教えください。
なお、環境は Cygwin に付いてきた GNU Awk 3.0.4 を NT4.0 上で動かしています。
Sep = "[:digit:]+/[:digit:]+/[:digit:]+ [:digit:]+:[:digit:]+ ID:"
BEGIN {
RS = Sep
# このレコードセパレータ以外でも、空行で区切られてしまう
ORS = Sep "\n\n"
}
{
array[NR] = $0
# この時にレコードが画面に表示されてしまう
}
END {
for ( x = NR; x >= 1; --x){
print array[x]
}
}
0272デフォルトの名無しさん
NGNG複行レコードは BEGIN { RS = "" } でつ。
0273デフォルトの名無しさん
NGNGなら、空行を取り除くフィルタを awk で作ればいいんじゃない?
{ if(strlen($0) > 0) print }
0274デフォルトの名無しさん
NGNGもとのデータがどういう構造なのかわからない。
0275デフォルトの名無しさん
NGNGわからないけど、推測だと、
BEGIN {
Sep = "[:digit:]+/[:digit:]+/[:digit:]+ [:digit:]+:[:digit:]+ ID:"
RS = ""
FS = Sep
ORS = "\n\n"
}
0276デフォルトの名無しさん
NGNG同じファイル(a.txt)の1列目と2列目の和を出力させるのは、
awk '{sum=$1+$2;print sum}' a.txt
で確認できたんですけど、2つ以上のファイルの任意の列の和(例えば、
1つ目のファイルの1列目と2つ目のファイルの2列目の和)を求めることって
できるんでしょうか?
0277デフォルトの名無しさん
NGNGできる。
getline < "filename.txt"
とかかな。
1 回の getline < "filename.txt" で 1 行目、2 回目の getline < "filename.txt" で
2 行目が読める。$0、$1、…の意味は標準入力のときと同じ。
最後に close("filename.txt") を忘れへんこと。
0278276
NGNGレスありがとうございました.ちょっと調べた感じですと,getlineは
“非常に複雑なため,初心者は使うべきではありません”なんて書いてありました...
でもちょっと試してみます.
0279271
NGNG「271 :デフォルトの名無しさん :03/05/08 23:41」
で分け、下から上に並べ替えるといった感じです。
FSはいらないような気がするのですが、やってみます。
また書き込みます。
0280デフォルトの名無しさん
NGNGなんとなく、ファイル構造を変更しないと面倒な気がする。。。
ま、なんにしても、配列に入れる時に表示されるのは変だよね。
0281デフォルトの名無しさん
NGNG動かしてみたら分かると思うけど、先頭に余計な改行が付いたり、RSに設定した行が消えたり、
split(",a,b,c", a, ",")のように、ログの最初に「空ログ」が来るから、
getlineで1つずつ読んだほうがいいかと思われ。
BEGIN {
RS = "[0-9]+:[^:]*:[0-9]+/[0-9]+/[0-9]+[ \t]*[0-9]+:[0-9]+"
hr = sprintf("%78s", "")
gsub(/ /, "-", hr)
ORS = "\n" hr "\n"
}
{ a[NR] = $0 }
END {
for (i = NR; i >= 1; i--)
print a[i]
}
# 以下ログ
1:デフォルトの名無しさん:03/05/08 23:41
2ch
net
2:デフォルトの名無しさん:03/05/08 23:42
age
sage
0282271
NGNG>280
なんだか、
Sep の初期化を BEGIN の前に行うと滅茶苦茶な動作になってしまうようです。
BEGINの中に入れるとOKでした。
>>281
>RSに設定した行が消えたり
そう、今日はこれで悩んでいました。
getline関数にも挑戦してみますが、
素朴に対応する方法はないでしょうか?
0283デフォルトの名無しさん
NGNGpaste 使って各ファイルをくっつけてから awk で足し算する。
0284デフォルトの名無しさん
NGNG>滅茶苦茶な動作
たぶんそれは、{}の外での定義は無視されて、
RS = ""だから空行で切れるようになったんだと思われ。
>RSに設定した行が消え
awk -F: '{ print $1 }' /etc/passwdってやると、区切り文字の:は消えるでそ?
FSとRSだから$0の扱いのほか多少は違うけど、どっちも区切り文字は消えるかと。
んで暇だったんで、getline版書いてみた。参考にでも。
http://cgi.members.interq.or.jp/hokkaido/asato/upload/jam3ddr/OB000618.txt
0286271
NGNG>たぶんそれは、{}の外での定義は無視されて、
BEGIN の前では定義できなかったのですね。 納得。
>んで暇だったんで、getline版書いてみた。参考にでも。
美しいコードをどうもありがとうございます。 早速動かしてみました。
awkで関数なんて書いたこと無かったので、ちょっと驚きです。
コードをトレースして勉強したいと思います。
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNG/多く*awk/ { ++counter }
/awk*多く/ { ++counter }
END { print "ネタの数 = " counter }
0289デフォルトの名無しさん
NGNG0290_
NGNG( ・∀・)/< こんなモノ見つけたっち♪
http://togoshi.ginza.st/hiroyuki/2ch01.html
http://www.togoshi.ginza.st/hiroyuki/2ch09.html
http://togoshi.ginza.st/hiroyuki/2ch05.html
http://www.togoshi.ginza.st/hiroyuki/2chz08.html
http://togoshi.ginza.st/hiroyuki/2ch06.html
http://www.togoshi.ginza.st/hiroyuki/2ch10.html
http://togoshi.ginza.st/hiroyuki/2ch04.html
http://www.togoshi.ginza.st/hiroyuki/2ch03.html
http://togoshi.ginza.st/hiroyuki/2ch02.html
http://www.togoshi.ginza.st/hiroyuki/2ch07.html
0291山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0292デフォルトの名無しさん
NGNGsed じゃ複数行マッチってできないんですか?
sed -e "/ab\nc/mp"
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGにしたいんですけどうまい方法が見つかりません.
初めは,pasteで該当ファイルを全部一つにしてからawkで抜き出す方法を考えた
んですが,pasteの引数を指定する方法(正規表現が使えない?)がわかりません
でした.
くだ質で質問したところ,Perlでできるということだったので,調べてみると
ttp://bopper.t.u-tokyo.ac.jp/cgi-bin/WebObjects/Yukawa/tips/t1.shtml
というページがあって,試してたら,空のファイルが9個できただけでした...
Perlをいじったことがないため,ソース理解するのは厳しかったです.
pasteやawkでできるうまい方法ってありますでしょうか?ヒントだけでもうれしいです.
0295デフォルトの名無しさん
NGNGfile1 file2 file3 file4
1_1 2_1 3_1 4_1
1_2 2_2 3_2 4_2
... ... ... ...
(要素 = fileナンバー_行数)
の意味だと仮定して、次のようなスクリプトを考えてみた。
コマンドラインから、awk スクリプトを起動する。
このとき、読み込みたいファイルを、awk スクリプトへの
オプションとして渡す。 (./a.awk -v filename="foo bar")
処理自体は、BEGIN ブロックの中で完結させる。
ファイル名を切り出す。(split()。セパレータは空白)
getline で各々のファイルを読み込みつつ、任意のフィールドを
field[file_no, line_no] = str;
のように代入。ファイルごとに行数は違っているだろうから、
どっかで最大行数を記憶しておく。
後は、最大行数とファイル数を使って for ループか何かで
field[] を出力。
0296294
NGNG丁寧な指針どうもありがとうございました.
言葉足らずですみません.“横方向に連結”というのは,ファイルが
file1 file2 file3 file4
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
という内容だとして,例えば各ファイルの第2フィールドだけを取り出して,
2 4 6 8
10 12 14 16
18 20 22 24
という出力を得たいという意味で使ってました.実際のファイル(ログファイル
のようなもの)は“管理+月日.tsv”という名前で毎日自動生成されてまして,
各ファイルから特定のフィールド(列)だけを取り出して,Excelにかけたいと
思ってます.
極論すれば,Excelにカット&ペーストでぺたぺた貼っていけばいいだけの話なん
ですけど,例えば3ヶ月のデータ(約90回)をやるとなるとさすがに苦しいので
なにかいい方法がないかと模索してました.
pasteの引数には複数ファイル指定できて,これはイケると思ったんですけど,
カレントディレクトリにあるtsvファイルを一括して指定することができません
でした.
0297294
NGNG0298デフォルトの名無しさん
NGNGgawk -f hoge.awk -v field=2 *.tsv
hoge.awk*****
FNR==1{ fcnt+=1; fname[fcnt]=FILENAME; }
{
src[FILENAME,FNR] = $field;
if(maxline < FNR) maxline=FNR;
}
END {
for(i=1; i<=fcnt; i++) printf("%10s ", fname[i]);
printf("\n");
for(i=1; i<=maxline; i++) {
for(j=1; j<=fcnt; j++) printf("%10s ", src[fname[j], i]);
printf("\n");
}
}
0299295
NGNGいえいえ、何かの役に立てればうれしいです。
>>298
やっぱり、他人のソース見るのは勉強になるなあ。
FNR == 1 で、次のファイルを読み込んだのを検出できるんですね。
0301デフォルトの名無しさん
NGNGヽ( ・∀・)ノ ウンコー
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNGWindows上で、Gawk 3.1.2を使いたいんだが、
・BCC5.5でメークかかるモンなんだろうか?
・マルチバイトパッチとかは、どこで手にはいるだろう?
0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG2.全部で、句読点はいくつあるか。
3.全部で、文はいくつあるか。
4.一番多く出現する単語は何か。
5.一番多く出現する品詞は何か。
6.一番長い文の長さは何文字で、何単語か。
7.一番多い品詞の並べ方はどのようなものか。
という課題にて、
;;;; $Id: 01.cor,v 1.22 1995/02/09 06:29:11 hkoiso Exp $
0100010 DB-- - <br>
0100020 ZN-- - けもの
0100030 HP-- - は
0100040 DTT- - 、
0100050 ZN-- - からだ
0100060 JB-- - じゅう
0100070 HP-- - に
0100080 ZN-- - け
0100090 HP-- - が
0100100 ZV2- - はえ
0100110 HP-- - て
0100120 ZV4- - いる
0100130 ZN-- - どうぶつ
0100140 HP-- - の
0100150 ZN-- - こと
0100160 HA3- - です
0100170 DTK- - 。
・
・
・
のように続いていく文章が与えられたのですが、どうすれば良いのか分かりません。
どういうプログラムを組めばよいのでしょうか?
0307デフォルトの名無しさん
NGNG1,2,3ができなきゃ、スクリプト書いてやっても
理解できないだろう。4以降は、連想配列使う。
連想配列って知ってる?
0308デフォルトの名無しさん
NGNG0309306
NGNG教授がほとんど説明せずに課題を出しているので、awkプログラム自体はっきりとは飲み込めていない状況です
説明なしで始めさせられ、5〜6時間程度しかやっていないので・・・UNIXのコマンドなども併用して良いそうなのですが・・・
連想配列という言葉自体始めて聞きました
少し調べてみます
上三問のヒントだけ、いただけないでしょうか?
0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNGまずマニュアル読め。
http://www.kt.rim.or.jp/~kbk/gawk/gawk_toc.html
0312デフォルトの名無しさん
NGNGプログラミング言語AWK
0313デフォルトの名無しさん
NGNGこのへん参考にしたら
ttp://okumedia.cc.osaka-kyoiku.ac.jp/~kokugo/nonami/awk/frame.html
0314306
NGNG0315306
NGNG0316デフォルトの名無しさん
NGNG進展したのか挫折したのかはっきりせい。
そのAAだとどっちか分からん。
0317デフォルトの名無しさん
NGNG_| ̄|○
↑ ↑↑
足 手頭
0318デフォルトの名無しさん
NGNG「ありがとございますた」に見えなくもないんスよね。
0319306
NGNG期限は明後日・・・ ひ ら が な の数を数え出す方法が分かりません。
もう少し手がかりを与えてくれないでしょうか?
できれば、上三問だけでも答えを知りたいですが・・・
0320デフォルトの名無しさん
NGNG1,2,3フィールドの意味が分からないので1のヒント。
$4には<br>かひらがなだけと仮定してるから、そこんとこ。
substr($4, 1, 2)# 1文字目のひらがな
substr($4, 3, 2)# 2文字目のひらがな
...
substr($4, length($4)-1, length($4))# 最後のひらがな
0321306
NGNGDB-- - <br>
ZN-- - けもの
HP-- - は
↑↑↑
ここいら辺りは品詞とかそういうものの区分らしいです
0322デフォルトの名無しさん
NGNGぐちゃぐちゃ言っとらんで出来た所までコード見せい。
間違ってるの指摘するのは簡単だが、作ってないものにアドバイスするの
は無理だ。
このペースじゃ明日後の完成は無理だぞ。
0323デフォルトの名無しさん
NGNG締め切りすぎに出すのは意地悪?だって、あまりの厨振りに・・・
もっとうまいまとめ方もあるだろうが・・・
bun_bango = 0
{
# 1.ひらがなの数
mojiretu = $4
while(match(mojiretu,/\x82[\x9F-\xF1]/)){
hiragana += 1
mojiretu=substr(mojiretu,RSTART+RLENGTH)
}
# 2.句読点の数
mojiretu=$4
while(match(mojiretu,/\x81[\x41-\x44]/)){
kutoten += 1
mojiretu=substr(mojiretu,RSTART+RLENGTH)
}
# 3.文の数
mojiretu=$4
while(match(mojiretu,/\x81[\x42\x44]/)){
bun_bango += 1
mojiretu=substr(mojiretu,RSTART+RLENGTH)
}
0324デフォルトの名無しさん
NGNGmojiretu=$4
while(match(mojiretu,/(\x82[\x9F-\xF1]|\x83[\x40-\x96]|[\x88-\x98][\x00-\xFF])+/)){
tangosuu += 1
bun_tango[bun_bango]=tangosuu-bun_tango[bun_bango-1]
tango[substr(mojiretu,RSTART,RLENGTH)] += 1
mojiretu=substr(mojiretu,RSTART+RLENGTH)
}
# 5.一番多く出現する品詞
hinsimei=$2
sub(/-+/,"", hinsimei)
hinsi[hinsimei] += 1
# 6.一番長い文の長さは何文字で、何単語か。
mojiretu = $4
while(match(mojiretu,/([\x88-\x98][\x00-\xFF])+/)){
kanji += 1
mojiretu=substr(mojiretu,RSTART+RLENGTH)
}
bun_moji[bun_bango]=kanji+hiragana-bun_moji[bun_bango-1]
# 7.一番多い品詞の並べ方はどのようなものか。
# 7.の出題は意味不明です。
}
0325デフォルトの名無しさん
NGNG# 1.ひらがなの数
print "1.全部で、ひらがなは", hiragana, "文字ありました。";
# 2.句読点の数
print "2.全部で、句読点は",kutoten,"個ありました。";
# 3.文の数
print "3.全部で、文は",bun_bango,"個ありました。";
# 4.一番多く出現する単語
max=0
for (i in tango) {
if (max <= tango[i]) {
max = tango[i]
}
}
for (i in tango) {
if (tango[i] == max) {
maxtango[i] = i
}
}
printf("%s","4.一番多く出現する単語は")
for (i in maxtango) {
printf("「%s」と",maxtango[i])
}
print "で",max,"回でした。"
0326デフォルトの名無しさん
NGNGmax=0
for (i in hinsi ) {
if (max <= hinsi[i]) {
max = hinsi[i]
}
}
for (i in hinsi ) {
if (hinsi[i] == max) {
maxhinsi[i] = i
}
}
printf("%s","5.一番多く出現する品詞は")
for (i in maxhinsi) {
printf("%sと",maxhinsi[i])
}
print "で",max,"回でした。"
0327デフォルトの名無しさん
NGNGmax = 0
maxindex = 0
for (i=0; i<=bun_bango; i++) {
if (bun_tango[i] >= max) {
max = bun_tango[i]
maxindex=i
}
}
printf("6.一番長い文の長さは%d文字で、%d単語でした。\n", bun_moji[maxindex], bun_tango[maxindex])
# 7.一番多い品詞の並べ方はどのようなものか。
print "7.の出題は意味不明です。"
}
0328山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0329323-327
NGNG0330山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGばかやろう。当然確認済みだ。エラーメッセージ見せてみろ。
0334デフォルトの名無しさん
NGNGかばやろう
0335デフォルトの名無しさん
NGNGgoogleで検索してみたのですが、いまいちよくわからず・・・
0336デフォルトの名無しさん
NGNGCygwin 入れる(gawk)か、awk を単体でインストール
(Vector に mawk というのがあるから検索汁)
0337デフォルトの名無しさん
NGNGサンクス
0338デフォルトの名無しさん
NGNG出力がおかしいよ
全部で一文あるとか言ってるし、明らかに自分の打った語数に足りない
0339デフォルトの名無しさん
NGNGあなたの打った語数とは、ひらがな・漢字の連続の個数です。
題意をよく理解してデータを作ってください。
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNGPG(漏れは違うが)にとって死活問題だ
0342デフォルトの名無しさん
NGNG全部で一文あるとか言ってるしでひとつ
丸がいくつもあるはずなのになぜか全部で文はひとつありましたとでる。
明らかに自分の打った語数に足りないでひとつ
ひらがなの数が打った数の表示に合わないし、確か何故か単語数のほうが多かった
0343デフォルトの名無しさん
NGNG最初の行のbun_bango=0をBEGIN{}に入れればいい。
そのくらいすぐ気付や。>漏れも
0344デフォルトの名無しさん
NGNG>丸がいくつもあるはずなのになぜか全部で文はひとつありましたとでる。
これ同じことじゃん
>明らかに自分の打った語数に足りないでひとつ
>ひらがなの数が打った数の表示に合わないし、確か何故か単語数のほうが多かった
「自分の打った」?データはたぶん古いchasenの出力を加工したものだろ
ほなら、テストデータあげるよ
0345デフォルトの名無しさん
NGNG01000020 助詞=係助詞-- - は
01000030 記号=読点-- - 、
01000040 名詞=一般-- - かだい
01000050 助詞=格助詞-一般-- - を
01000060 動詞=自立-- - だし
01000070 助動詞-- - た
01000080 名詞=一般-- - どうぶつ
01000090 助動詞-- - でしょ
01000100 助動詞-- - う
01000110 記号=句点-- - 。
01000120 -- - EOS
01000130 副詞=一般-- - まず
01000140 記号=読点-- - 、
01000150 名詞=一般-- - かだい
01000160 助詞=連体化-- - の
01000170 名詞=一般-- - なかみ
01000180 助詞=格助詞-一般-- - が
01000190 名詞=形容動詞語幹-- - ふめいりょう
01000200 助動詞-- - です
01000210 記号=句点-- - 。
01000220 名詞=一般-- - ぶん
01000230 助詞=副助詞-- - なんて
01000240 名詞=さ変接続-- - ていぎ
01000250 助詞=連体化-- - の
01000260 名詞=ない形容詞語幹-- - しかた
01000270 助詞=格助詞-一般-- - で
01000280 副詞=助詞類接続-- - どう
01000290 助詞=副詞化-- - に
01000300 助詞=副助詞-- - でも
0346デフォルトの名無しさん
NGNG01000320 助詞=接続助詞-- - し
01000330 記号=句点-- - 。
01000340 -- - EOS
01000350 名詞=一般-- - ひんし
01000360 助詞=格助詞-一般-- - の
01000370 動詞=自立-- - ならび
01000380 名詞=一般-- - ジゅん
01000390 助詞=副助詞-- - なんて
01000400 記号=読点-- - 、
01000410 名詞=一般-- - はんい
01000420 助詞=格助詞-一般-- - を
01000430 名詞=さ変接続-- - してい
01000440 動詞=自立-- - し
01000450 助動詞-- - なけれ
01000460 助詞=接続助詞-- - ば
01000470 名詞=さ変接続-- - いみ
01000480 形容詞=自立-- - ない
01000490 助詞=接続助詞-- - し
0347デフォルトの名無しさん
NGNG01000510 -- - EOS
01000520 名詞=代名詞-一般-- - あなた
01000530 助詞=係助詞-- - は
01000540 記号=読点-- - 、
01000550 名詞=一般-- - さいてい
01000560 助詞=連体化-- - の
01000570 名詞=一般-- - けだもの
01000580 助動詞-- - です
01000590 記号=句点-- - 。
01000600 -- - EOS
01000610 副詞=一般-- - どうせ
01000620 未知語-- - chasen
01000630 助詞=連体化-- - の
01000640 名詞=さ変接続-- - しゅつりょく
01000650 助詞=格助詞-一般-- - を
01000660 名詞=さ変接続-- - かこう
01000670 動詞=自立-- - し
01000680 助動詞-- - た
01000690 名詞=非自立-一般-- - もの
0348デフォルトの名無しさん
NGNG01000710 助動詞-- - う
01000720 助詞=接続助詞-- - から
01000730 記号=読点-- - 、
01000740 名詞=一般-- - でーた
01000750 助詞=格助詞-一般-- - を
01000760 動詞=自立-- - つくっ
01000770 助詞=接続助詞-- - て
01000780 接頭詞=名詞接続-- - お
01000790 動詞=自立-- - みせ
01000800 動詞=接尾-- - し
01000810 助動詞-- - ましょ
01000820 助動詞-- - う
01000830 記号=句点-- - 。
01000840 -- - EOS
0349デフォルトの名無しさん
NGNGその文章は明らかに
>全部で一文あるとか言ってるしでひとつ
↑問題
>丸がいくつもあるはずなのになぜか全部で文はひとつありましたとでる。
↑その解説
>明らかに自分の打った語数に足りないでひとつ
↑問題
>ひらがなの数が打った数の表示に合わないし、確か何故か単語数のほうが多かった
↑その解説
という構成だから上二つが同じ事言ってるのは(以下略
0350338-349
NGNG0351デフォルトの名無しさん
NGNGうっせぇ
0352山崎 渉
NGNG0353デフォルトの名無しさん
NGNG0354デフォルトの名無しさん
NGNG「使用言語にawkを選択した時点で勝ち」
つーのがあるよね。one liner とか。
0355デフォルトの名無しさん
NGNGawkの場合、
「使用言語にawkを選択した時点で負け」
つーのがあるよね。遅い、制限多し(ディレクトリ操作、Socket、モジュール、Oop・・・)
0356山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0357デフォルトの名無しさん
NGNG$3 から行末まで全部とか
$2 から $20 までとか って指定できますか?
$2 $3 .... $20 って全部書かないと駄目でしょうか?
0358デフォルトの名無しさん
NGNGfor でループして望みのことはできない?
for (i = 2; i < 20; i++) {
buf = buf" "$i
}
# buf を使って何かする
上のは単に例だが。
0360デフォルトの名無しさん
NGNGああ、それイライラするときあるな
全部書くか、forで回すか
先にcut -fでフィルタしてから処理してるけど
awkでやるいい方法あるんかね
0361デフォルトの名無しさん
NGNGsubstr($0, index($0,$3))
0362デフォルトの名無しさん
NGNGindex()って裏もあるの?
0363デフォルトの名無しさん
NGNGバグってるっぽいなw
0364デフォルトの名無しさん
NGNGしかし「あおく」って発音する奴いるんだが。。。
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNGほとんど遊んでますな。
0368デフォルトの名無しさん
NGNG梨奈ちゃんは本当にかわいくセーラー服が似合います。
現役といっても通用するそのロリ顔にはファンが多いのも納得です。
気持ちいい、とうっかり言ってしまうと止めてしまうという
男優のいじわるに結構楽しんでしまっている梨奈ちゃん。
感度良好の彼女にとっては焦らし作戦に匹敵する快感なのでは?
こんなエロエロ無料ムービーが見てみたいなら
http://www.uradouga.com/
0369デフォルトの名無しさん
NGNGそれだけで60%楽になるなら
シェルスクリプト書けるようになってcron使うようになれば
もう40%いけるぞw
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG例えば、awk で syslogのデータを逐一監視してマッチしたデータを、摘出ってことをしたいんですが、syslogが大量に出てきたときに
データのとりこぼしとかって事はないでしょうか?
やりたいことは、各ユーザ(UID)がFTPサーバにUPLOADやDOWNLOADしたときのバイト数をそれぞれカウントしていき、保管したいのですが、
awkでそういったことは可能でしょうか?
0372デフォルトの名無しさん
NGNG出来ると思う。アクセスの頻度によっては現実的じゃないかもしれない。
0373デフォルトの名無しさん
NGNGまあなに使っても問題になるからいいか
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNGありがとうございます!!
そういえば、ログなんかぼ〜と眺めるときに、tail -f /var/log/messages とかやります。
あとは、awkの方をじっくり考えていきたいと思います
0376デフォルトの名無しさん
NGNGtotal = total + $5;
}
END {
printf("%d bytes\n",total);
}
こう記述して、
ls -l * | gawk -f bytes.awk としたら
6.1369e+10 bytes
このように出てしまったんですが、どんなに大きな数字でもきちんと表示できるようにするにはどうすればイイデスカ?
0377デフォルトの名無しさん
NGNG%.0f
0378デフォルトの名無しさん
NGNGありがとうございます。
うまくいきました。
0379デフォルトの名無しさん
NGNG今このような作業をしています。
No.1 鈴木 Feb-01
No.2 松園 Mar-03
No.3 黒澤 Apr-04
No.4 鈴木 Jan-02
No.5 松園 Dev-02
この様な、リストを、以下のように一括で編集できるスクリプトを、書きたいのですが、
どのように書けばいいですかね?実際のファイルは4000個くらい並んでます。
鈴木 Feb-01,No.1 Jan-02,No.4
松園 Mar-03,No.2 Dev-02,No.5
黒澤 Apr-04,No.3
名前 半角スペース 日付,番号 と、言う形にしたいのですが・・・。
どんな風に書けばいいのでしょうか・・・。
0380デフォルトの名無しさん
NGNG{ a[$2] = a[$2] " "$3","$1; }
END { for (n in a) print n, a[n]; }
$ cat data.dat
No.1 鈴木 Feb-01
No.2 松園 Mar-03
No.3 黒澤 Apr-04
No.4 鈴木 Jan-02
No.5 松園 Dev-02
$ awk -f a.awk data.dat
松園 Mar-03,No.2 Dev-02,No.5
黒澤 Apr-04,No.3
鈴木 Feb-01,No.1 Jan-02,No.4
0381デフォルトの名無しさん
NGNG読み込んでフィールドを並び変えてフォーマットするだけ
0382デフォルトの名無しさん
NGNGいや、重複してるの横につなげてるから
0383デフォルトの名無しさん
NGNGhttp://infoshako.sk.tsukuba.ac.jp/jdoc/GNU/AWK/jgawk-jman/html/jgawk_97.html#SEC102
の OFMT の変更だったのだが、
>丸め誤差が許容できるなら
>%.0f
の方が良いのかな。どうなんでしょうか?
0385380
NGNG0386デフォルトの名無しさん
NGNG泣くな。お天道様はちゃあんと見ておられる。
0387デフォルトの名無しさん
NGNG結局380になると思うよ。
0389デフォルトの名無しさん
NGNG383の方が正統っていうか王道っぽい
377は邪道っていうか脊髄反射
けどOFMTさわったことないんだよな
なにを設定すればいいんだ?
%.6gって・・・
0390ruby-awker ◆Q13MAht0qk
NGNGちょっと変わった事したいのでコテってみました
awkでやるのは大変そうなものは
perl使えとか、ruby使えとか、良く言われるけど
んなもんいきなり使えるかヴォケ!!
今からperlやrubyなんてやってられねーよ
って時の助けになるようにちょっとづつtipsを書き込んでいきたいと思います
問題を解決するためのawk+αが欲しいんだけど
perl、ruby全部なんて覚えてられない。(それはコスト高すぎ)
必要最小限なものってなに?
ってのを追求していきたい(perlは苦手なんでrubyで)
なのでawkだけで問題なく出来ることはawkを使う方向で。
シェル、unixコマンド、sed、awk等を組み合わせれば簡単に出来る場合も
そちらを優先する方向で。
0391ruby-awker ◆Q13MAht0qk
NGNGあんまり意味ないけど、まあ、欄が100超えててawk使えねーぞ、ヴォケ!!って時の役には立つかな
infile
---------------------
001,aaa,AAA
002,bbb,BBB
---------------------
期待するoutput
---------------------
開始
aaa
bbb
終了
---------------------
コマンドライン
awk :% awk -f a.awk infile
ruby:% ruby -anl a.rb infile
a.awk
---------------------
BEGIN {FS=",";print "開始";}
{print $2;}
END {print "終了";}
---------------------
a.rb
---------------------
BEGIN {$;=",";puts "開始";}
puts $F[1]
END {puts "終了"}
---------------------
0392デフォルトの名無しさん
NGNG---------------------
print "開始\n";
while(<>) { split(/,/); print "$_[1]\n"; }
print "終了\n";
---------------------
0393ruby-awker ◆Q13MAht0qk
NGNGa: 区切り文字で文字列を分割する
分割した文字は、配列【$F】に格納される
awkとの対応
$1→$F[0]
$2→$F[1]
・・・
n: 入力を一行づつ読み込んでループさせる
一番awkらしい部分
入力行は【$_】に格納される
awkとの対応
$0→$_
l: 文字列に付いている改行を削除
これを入れないと最後の欄に改行がついてます
あと、printに影響
printfはawkでもrubyでも同じ動作をします
printは慣れるまで使わない方がいいかも。
(lオプションありなしで動作が変わるのがいやん)
※使うならBEGINで【$,】と【$\】を明示的に設定するようにする
なのでprintの代わりにputsを使う
変数を混ぜないでただ文字列を出力するならawkのprintと同じ感覚で使えます
混ぜる時はこんな感じで
puts "aaa" + foo + "bbb"
けど個人的には使い分けをしないで済む(余計なことを考えないで済む)
printfを使うのがお勧め
awkとの対応
print→puts(変数を混ぜないでただ文字列を出力するなら)
printf→printf(同じ動作をすると考えていい)
注意点:
rubyだとメイン部分の波括弧がいらない
rubyだとセミコロンはあってもなくてもいい
0394ruby-awker ◆Q13MAht0qk
NGNGああ、、、スマートですね
わたしの場合、perlでもnオプション付けてBEGIN付けてEND付けてってやりそう・・・
次はawkじゃ面倒くさそうだなあ・・・
とruby使った例です
infile
-------------------------------------------------------
001,A01/aaa/101,A02/bbb/199/BBB,A03/ccc/109/CCC,・・・
002,A01/zzz/0/YYY,A02/vvv//,A03/eee/10/FFF,・・・
-------------------------------------------------------
・・・には,WWW/XXX/YYY/ZZZの構造の文字列が続きます
欄の数は不定
やりたいこと
1:,WWW/XXX/YYY/ZZZ
のYYYの部分に
1または2桁の数字があった場合は先頭0埋めして3桁にする
0桁の場合は000
2:WWW/XXX/YYY/ZZZ
のZZZの部分が存在しなかったら
AAAを付与する
この場合、最後の"/"はあるかないかわからない
期待するoutfile
-------------------------------------------------------
001,A01/aaa/101/AAA,A02/bbb/199/BBB,A03/ccc/109/CCC,・・・
002,A01/zzz/000/YYY,A02/vvv/000/AAA,A03/eee/010/FFF,・・・
-------------------------------------------------------
0395ruby-awker ◆Q13MAht0qk
NGNGBEGIN{FS=","}
{
printf("%s", $1);
for(i=2;i<=NF;i++) {
printf(",");
cnt = split($i, ary, "/");
printf("%s/%s", ary[1], ary[2]);
if(ary[3] == "") {
printf("/000");
}
else {
printf("/%0.3d", ary[3]);
}
if(cnt == 3 || ary[4] == "") {
printf("/AAA");
}
else {
printf("/%s", ary[4]);
}
}
printf("\n");
}
0396ruby-awker ◆Q13MAht0qk
NGNG||
∧||∧
( ⌒ ヽ
∪ ノ
∪∪
BEGIN {$;=","}
printf("%s", $F[0])
$F[1, $F.size].each { |str|
ary = str.split("/", -1)
if(ary[2] == "")
ary[2] = "000"
else
ary[2] = sprintf("%0.3d", ary[2])
end
if(ary.size == 3 || ary[3] == "")
ary[3] = "AAA"
end
printf(",%s", ary.join("/"))
}
printf("\n")
0397デフォルトの名無しさん
NGNGls -il --full-time したものを、list.logに入れて現在下のような感じになってます。
cat list.log
4407301 -rwxrwsr-t 1 sakura hoge 1736 2001-08-13 05:08:20.000000000 +0900 (ハイスクール!奇面組)象さんのすきゃんてぃ.txt
5029910 -rwxrwsr-t 1 sakura hoge 855 2001-08-13 05:12:18.000000000 +0900 (アイドル天使ようこそようこ) 恋文ブギ.txt
5128240 -rwxrwsr-t 1 sakura hoge 1263 2001-08-13 05:12:57.000000000 +0900 (小公女セーラ)ひまわり.txt
そして、ファイル名を抜き出すものをawkで書きました
cat filecut.awk
NF == 10{
cnt++;
printf "%d File inode:%d %s\n",cnt,$1,$10;
}
そしたら、inodeが4407301と5128240 のものは、きちんと表示されるのですが、5029910に関しては、ファイル名に最初からスペースが入ってるので、
おそらく NFが11となっている為きちんと表示できません。
NF == 11{
cnt++;
printf "%d File inode:%d %s\n",cnt,$1,$11;
}
というのも、付け足してみて表示してみたんですが、そしたら、今度は、スペースが2つ入ってるものが取れませんでした。
スペースに関係なく、ファイル名を取得できる方法はないでしょうか?
0398デフォルトの名無しさん
NGNG決め打ちやめて、for で $n を増やして取得するようにすれば
(汚いけど)出来るが。
>>357-363 見たら参考になるかも。
0399デフォルトの名無しさん
NGNGあとは適当にアレンジして。
func aaa( i,tmp) {
for (i = 10; i < NF; i++) {
bbb = bbb" "$i
}
return(bbb)
}
0400デフォルトの名無しさん
NGNGバグった。
func aaa( i,bbb) {
for (i = 10; i < NF; i++) {
bbb = bbb" "$i
}
return(bbb)
}
0401デフォルトの名無しさん
NGNGありがとうございます。
こんな感じで、思い通りに表示できました。
{
cnt++;
if(NF >= 10){
printf "%d file inode:%d ",cnt,$1;
for(i=10; i <= NF; i++){
printf "%s ",$i;
}
print "\n";
} else {
printf "%d File inode:%d %s\n",cnt,$1,$10;
}
}
0402397
NGNGユーザ定義関数版のサンプルありがとうございます。
見た目がスマートそうだったので、作り直してみました。
func FileCut(FileName){
for(i=10;i <= NF; i++){
FileName = FileName" "$i;
}
return(FileName)
}
{
cnt++;
FileName=FileCut($10);
printf "%d File inode:%d %s\n",cnt,$1,FileName;
}
func aaa( i,bbb) となってましたが、for文で iを初期化してるみたいなので、引数は、1つにしてみました。
0403ruby-awker ◆Q13MAht0qk
NGNGcntにローカル変数使えなくてビックリ・・・(グローバル変数にしました)
あとバグもってるけどどうしたものやら
・ファイル名に空白が2以上連続してると喰われて1つになる
------------------------------------------------------------
BEGIN{$cnt = 0}
$cnt = $cnt + 1
printf("%d File inode:%d %s\n", $cnt, $F[0], $F[9, $F.size])
------------------------------------------------------------
0404ruby-awker ◆Q13MAht0qk
NGNGaオプションで文字列分割してたのを
明示的にsplitさせて回避
% ruby -nl a.rb a.in
------------------------------------------------------------
BEGIN{$cnt = 0}
$F = $_.split(/\s/, -1)
$cnt = $cnt + 1
printf("%d File inode:%d %s\n", $cnt, $F[0], $F[9, $F.size].join(" "))
------------------------------------------------------------
0405397
NGNG現在やっと、まともに動くようになりました。
今現在は、ls -il --full-time /hoge/hogehoge/* を打って、FileCut.awkを通したときに下のように表示されるようになりました。
5029940,-rwxrwsr-t,sakura,hoge,1726,2001-08-13, /hoge/kashi/00_歌詞/魔法少女&戦う少女:, (ファンシーララ)トランス・パランス.txt
inode chmod UID gid size time FullPath FileNmae
今の問題点は、ls -il --full-time /hoge/hogehoge/* を実行したとき、ディレクトリだけが表示されてしまう行があるので、
パターンの NF == 1 とのところで、Directoryだけを抜き出すように、ユーザ定義用関数を用意して対応しました。
今現在の問題は、NF == 1 としてることによって、$1にパス名は確保されているが、Directoryにスペースが入ってる場合は、
$2以降は何も代入されていないのでは?という点です。
長文になって申し訳ありませんが、NF == 1 の場合$1が受け取るパスは、かならず、/hoge/hogehoge/ 以下と決まってるので、
現在 NF == 1になってるパターンを、正規表現に置き換えてしまったらいいのかな?と思っているのですが、妥当でしょうか?
正規表現は、あまり知らないのですが、$1~\/hoge\/hogehoge\/\* こんな感じをパターンに置けばいいのかなと思っています。
0406デフォルトの名無しさん
NGNG下のソースで現在の、ls -il --full-time /hoge/hogehoge/* から、各カラムを、','で区切って一覧を出しています。
上手くいったらこれを、PostgreSQLなどに投げたいと思っています。
BEGIN { FS = " "; }
# ファイル名抜き出し用ユーザ定義関数
func FileCut(FileName){
FileName = "";
for(i=10;i <= NF; i++){ FileName = FileName" "$i; }
return(FileName)
}
# ディレクトリ名抜き出し様ユーザ定義関数
func DirCut(DirName){
DirName = "";
for(i=1;i <= NF; i++){ DirName = DirName" "$i;}
return(DirName)
}
#問題となっている正規表現に置き換えたらいいのかどうか迷っているパターン
NF == 1 { path = DirCut($1); }
NF > 9 {
cnt++;
FileName=FileCut($10);
printf("%s,%s,%s,%s,%s,%s,%s,%s\n",$1,$2,$4,$5,$6,$7,path,FileName);
}
END { printf("%s件\n",cnt); }
0407デフォルトの名無しさん
NGNG遊びでやってるだけですので、ウザイ様でしたらそのまま放置でも結構ですので(^^;;
まいどまいど長文ですみません;;
0408397
NGNGあってるか判りませんが、このような正規表現をパターンに入れて実行したら動きました。
どんな条件がきても、大丈夫かどうか不安なので引き続き調べてみたいと思います。
$1~/\/hoge\/hogehoge\//
0409デフォルトの名無しさん
NGNGのような出力を得たいと思います。(<>部分はファイルの内容ではなくファイ
ル名)
どのようなawkスクリプトが考えられるでしょうか?
<A.txt>
X1,X2,X3,X4,X5,X6
<B.txt>
X1,X2,X5
<C.txt>
X1,X3,X4,X5,X6
:
<output.txt>
X1,X2,X3,X4,X5,X6
B,1,1,0,0,1,0
C,1,0,1,1,1,1
:
つまり,A.txtと,B.txtやC.txt内のkeywordを比較し,マッチすれば1,しな
いなら0として表示したい。そのとき出力の形式として表頭にはA.txtの
keywordを,表側にはB.txtやC.txtなどファイル名を連想させるものを配置し
たい。
0410デフォルトの名無しさん
NGNG連想記憶による擬似2次元配列じゃないだろうか。
0411デフォルトの名無しさん
NGNGでは,連想記憶による擬似2次元配列を利用した手頃なサンプルスクリプトを
ご存じでしょうか?
0412デフォルトの名無しさん
NGNG{
/* 1ファイル目について項目のリストを作る。*/
ITEMS[項目名]=1;
/* 2ファイル目以降について、出現項目で以下を実行する。*/
TBL[ <ファイル名> "," 項目名] = 1;
/*同時にファイル名のリストも作っとく。*/
FILES[<ファイル名>]=1;
}
END{
for (file in FILE) {
for (item in ITEMS){
printf ("%d,", TBL[file "," item]);
}
print;
}
}
/* こんな感じってことで勘弁して。もう生意気なこと言わないから */
0413デフォルトの名無しさん
NGNGgawk -f hoge.awk a.txt b.txt c.txt
----hoge.awk
BEGIN{FS=","}
{
if(FNR==NR) {
for(i=1;i<=NF;i++) keys[i]=$i;
}
else {
for(i=1;i<=NF;i++) {
dat[FILENAME,i]=0;
for(j in keys) if(keys[j]==$i) dat[FILENAME,i]=1;
}
cnt[FILENAME]=NF;
}
}
END{
for(i in keys) printf(keys[i]",");
printf("\n");
for(fname in cnt) {
printf(fname",");
for(i=1; i<=cnt[fname]; i++) {
printf(dat[fname,i]",");
}
}
}
0414デフォルトの名無しさん
NGNG問題勘違いしてました。
>>412さんのでできましたね。
はずかすぃ
0415デフォルトの名無しさん
NGNG>>413
なるほど。
両者を参考に,こんな具合にしてみました。
ところで, if(FNR==NR) は,どういう意味でしょうか。
----hogehoge.awk
BEGIN{FS=","}
{
if(FNR==NR) {
print;
for(i=1;i<=NF;i++) ITEMS[$i]=1;
}
else {
for(i=2;i<=ARGC -1;i++) FILES[ARGV[i]]=1;
for(i=1;i<=NF;i++) {
TBL[FILENAME "," $i]=1;
}
}
}
END{
for (file in FILES) {
printf(file",");
for (item in ITEMS){
printf ("%d,", TBL[file "," item]);
}
printf ("\n");
}
}
0416デフォルトの名無しさん
NGNGhttp://infoshako.sk.tsukuba.ac.jp/jdoc/GNU/AWK/jgawk-jman/html/jgawk_toc.html
FNRとNRの説明があります。
ttp://infoshako.sk.tsukuba.ac.jp/jdoc/GNU/AWK/jgawk-jman/html/jgawk_98.html#SEC103
総レコード数とファイルレコード数が一緒なら最初のファイル。
違えば2番目以降のファイル。
0417デフォルトの名無しさん
NGNG> 総レコード数とファイルレコード数が一緒なら最初のファイル。
> 違えば2番目以降のファイル。
ありがとうございます。
処理開始時だけ,FNR=NRで,後はずっと,FNR<NRとなることを利用してる訳で
すね。これって,今回のケースのように,複数のファイルを引数にとったとき
に,各ファイルによって処理内容を変更するための常套手段だと覚えておけば
いいでしょうか?
0418413
NGNG最初のファイルだけ特別な時に使えますね。
各ファイルごとに処理を変えるなら、FNR==1かFILENAMEを直接参照ですね。
0419デフォルトの名無しさん
NGNG結果を得たいと思います。
input-1 inpu-2 output
1 1,10,11 1,10,11
2 3,30,13 2,NA,NA
3 4,40,14 3,30,13
4 4,40,14
5 5,NA,NA
input-1とinput-2の第一列目を比較して,同じならinput-1の第一列目と
input-2の第二列目以降を出力し,違えばNAを表示するということです。
0420デフォルトの名無しさん
NGNG・input-1, input-2 の例
・上記例から得たい output の例
を晒せ
0421デフォルトの名無しさん
NGNG晒したつもりでしたが書き方が悪かったようでした。
input-1は以下のコマンドを実行して作成したものです。
echo -e '1\n2\n3\n4\n5' > input-1
input-2は以下のコマンドを実行して作成したものです。
echo -e '1,10,11\n3,30,13\n4,40,14' > input-2
得たい結果は以下のコマンドを実行して作成したようなものです。
echo -e '1,10,11\n2,NA,NA\n3,30,13\n4,40,14\n5,NA,NA' > output
0422デフォルトの名無しさん
NGNG-----
BEGIN{ FS=",";
while((getline < ARGV[2]) > 0) Tbl[$1]=$2 "," $3;
ARGV[2]=""; }
{ print $1 "," (($1 in Tbl)?Tbl[$1]:"NA,NA"); }
-----
0423デフォルトの名無しさん
NGNG完全解答ありがとうございました。
0424デフォルトの名無しさん
NGNG>>26 のネット書店が扱ってたようですが、
今度はゲーヲタ向け出版社から新装版で出ますた。
http://w3.shinkigensha.co.jp/books/4-7753-0249-3.html
0425デフォルトの名無しさん
NGNGif(/abc/){
...
}
ってやると構文エラーって怒られるんだ。
でも、Linuxでは通るんだよね。
何か違うの?
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNGと書くのが普通じゃないかと
0428デフォルトの名無しさん
NGNGすみません、-fオプションで別ファイルにしたいんですよ。
0429デフォルトの名無しさん
NGNG0430428
NGNGえ、そう?
コマンドラインから実行する場合は>472が書いた方法でやるけど、スクリプトファイルを別に作る場合は-fオプションじゃなかったっけ?
で、そのスクリプトファイルの中に記述する場合に>425の方法でやりたいわけですよ。
0431430
NGNG>472じゃなくて>427ね。
0432デフォルトの名無しさん
NGNG#!/usr/bin/awk -f
/abc/ { print }
という感じで一行目が違うだけで下は普通のawkのコード。
0433デフォルトの名無しさん
NGNGApacheのインストールにも使われているしNE!
0434デフォルトの名無しさん
NGNG↓ほれ
ttp://superk.physics.sunysb.edu/~kenkou/program/awk/node19.html
0435428
NGNGえ? ソラリスの場合は、シェルスクリプトみたいな感じでやらないとダメなの?
そんなことAWKの本には書いていなかったよ。ただスクリプトファイルを別に作る場合には云々というだけで。実際、WINもLinuxもそれでOKなんだけど。
なんかこんがらがってきた。
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNGよーするにだ、スクリプトファイルに >427 のよーに書けと
言っている訳なんだが理解できんか?
0438デフォルトの名無しさん
NGNGif(/abc/)ってのは、本来の文法には違反するわけで。
gawkってコマンドが、文法を拡張したから使えてるだけで。
たぶん正規表現だけ書くと、if($0 ~ /abc/)と同じ意味になるんだろう。
で、ふつうシェルから書くと、
awk '/abc/{print}'
って書くと思うけど、
fオプション使った場合は、その''で囲んだ中身を、
#!/usr/bin/awk -f
の後に続けて書けばいい、と。
0439デフォルトの名無しさん
NGNG無きゃ困る?
0440デフォルトの名無しさん
NGNG>#!/usr/bin/awk -f
はいらね−だろがヴォケ!
0441デフォルトの名無しさん
NGNGOSのsortとか使うときに必要
0442デフォルトの名無しさん
NGNGうーん、そっか。面倒くせーなぁ。
さんきゅ。
0444デフォルトの名無しさん
NGNGいや実はポーターで。
system抜けば多くの実装がすぐにでも動かせるんだけど、
入れようとすると途端に面倒に。
まあ不可能じゃねーからどうにかするけど。
せっかく久し振りに風邪ひいたから、明日も仕事休んでやってみるかな。
実装書くのも面白そうだね。
規模はそんなに大きくないから細かい部分を好きに弄りながら楽しめそう。
渋くて好みには合うから、その内やってみるかな。
0445デフォルトの名無しさん
NGNG>>434読め
0446デフォルトの名無しさん
NGNGどこが難しいんだ?
つか、system() 使わなければ、実装せずに済みそうな言い回しに聞こえたんだが。
0447デフォルトの名無しさん
NGNGパイプが少し。
面倒なだけで難しくはない。
肝心な物抜きで人前に出すのは間抜けだけど、
多少表に見える形で動いた方が自分が安心出来るとか。
そんで少しでも多めに時間かかりそうな部分は後回しにして
取り敢えず経過物出していこうかなとか。そういう考え。
不完全な状態でも便利に使えるものってあるし。
まあ焦らずやる事に。
0448デフォルトの名無しさん
NGNG例のようなリストを下のような結果に整列させたいです。
条件は、まず、上から順に001を探す。
001の$2が一致する002を探して001の下に出力し、以下繰り返し。
001があったら002は必ずあるものとして考えます。
【例】
001 AAA ****
001 BBB ****
002 AAA ****
001 CCC ****
002 CCC ****
002 BBB ****
↓↓
001 AAA ****
002 AAA ****
001 BBB ****
002 BBB ****
001 CCC ****
002 CCC ****
awkは行単位で処理をするから、
1番目の001を見て、その中のデータを元に全行を検索、
見つかったら2番目の001を見て・・・というのは無理なのでしょうか。
もしよろしければ教えて頂けないでしょうか。
0449デフォルトの名無しさん
NGNGawk '{print $2,$1,$3}' data | sort | awk '{$2,$1,$3}'
0450デフォルトの名無しさん
NGNG何が面倒なのか、あんまりわかんなかったよ。ポーティングなんだよね?
シェルかパイプに制限があるの?
0451デフォルトの名無しさん
NGNGその例のままなら、sort +1 +0でよさそうな気がする。やってることは449とほとんど同じ。
ま、環境がWinなら話は別だが。
それから、逆読みしたいなら、多くの場合は、
行ループで配列に詰めて、ENDで処理している気がする。
0452デフォルトの名無しさん
NGNG制限と言うより不足かな。
なまじ不可能でないのが何とも。
端的に言えばコマンドの解釈と実行にシェルが介在してくれないし、
popen()もそれを作るのを助けるfdopen()も無い。
gawkのマニュアル見ると一部の環境でsystem()は使えないと書いてあるけど、
全部用意すれば使えない訳じゃないし、という。
風邪ひいてる間に作業して3分の1くらいは終わったので、
あと今週休日が取れれば終われるかも。
0453デフォルトの名無しさん
NGNG>>451
どうもありがとうございます。
ちょっと例の文章がわかりづらくてすいません。
$2なんですが、順番にソートさせたいわけではなく、
001が出てきた順に表示させたいんです・・・。
001 X
001 A
001 C
だったら
001 X
002 X
001 A 以下略
のようにしたいんです。どうかご教授お願いします。
0454499(だれ?)
NGNGawk -f pre.awk data | sort | awk '{print $2,$3,$4}'
0455デフォルトの名無しさん
NGNGあいかわらず日本語も例も意味不明
0456デフォルトの名無しさん
NGNG/^002/ {l002[$2]=$0}
END {for(i=0;i<n;i++){ print l001[k[i]]; print l002[k[i]]}
0457デフォルトの名無しさん
NGNGどうすればいいのでしょうか
文字列の長さが固定ならsubstr$1で指定すれるのはできるのですが、
不特定の長さの文字列から、というので行き詰まっています
もしよろしければ教えて頂けないでしょうか。
0458デフォルトの名無しさん
NGNGいまいちかっこわるいが、
{gsub(/....$/, RS "&"); print $NF}
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNGsubstr($str, length($str)-3)
0461デフォルトの名無しさん
NGNG変数に $ はいらない。Perlのしすぎか?
…いやひょっとして、
str = 3
=> ($str == $3)
みたいなコードの一部なのか?
0462デフォルトの名無しさん
NGNG$が演算子だったというのをawk使い始めて
十数年にしてはじめて知ったよ...
.
0463 460
NGNGあー そうね $はいらんね
perlでなくphpだけど まあどうでもいいな
失礼
0464デフォルトの名無しさん
NGNGcursesみたいに
0465デフォルトの名無しさん
NGNG0466デフォルトの名無しさん
NGNGawkの作者は1行プログラムを薦めている。
そもそもフィルタとして使われるべきツールである。
0467デフォルトの名無しさん
NGNGすすめてませぇ〜ん
0468デフォルトの名無しさん
NGNGユーザーが複雑なプログラムを組むのを見て驚いたとは言っていたな
最初のバージョンでは function すらなかったが、それでLispインタプリタを
作ったつわものもいた。
0469デフォルトの名無しさん
NGNG#!/bin/sh
a=`date +%H`
とか書くところ、awkだとどう書くの?
「gawk使え」ってのは無しでお願い。
0470デフォルトの名無しさん
NGNGgawk 使(ry
#!/usr/bin/awk -f
("date +%H") | getline a;
0471470
NGNGBEGIN {
}
で挟んどけ。
0472デフォルトの名無しさん
NGNGttp://infoshako.sk.tsukuba.ac.jp/jdoc/GNU/AWK/jgawk-jman/html/jgawk_25.html
見て事故^H^H自己解決したところでした _o_
close しないで放置プレイでも桶なんでしょうか?
0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG>close しないで放置プレイでも桶なんでしょうか?
何度も通るアクションで使うんだったら close しないとだめでつ。
0476デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNGなるのかな?まさか10kは逝かないと思うが…。
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNGttp://www.vector.co.jp/soft/dos/game/se008956.html?site=n
0484デフォルトの名無しさん
NGNGやっぱUNIXのツールで書いてるとソースの寿命が長いね。
AWKは枯れてる分、Perlより安心感あるし。
0485デフォルトの名無しさん
NGNGWindows2000SP4のコマンドプロントで使うため、ベクターから
Japanized Gnu Awk (jgawk) 2.15.2 + 1.1
をダウンロードし、いじってみましたが、書籍の中に'NDP'、'DOSエクステンダ'
等の記述があり、上記のバージョンは自分の環境に適しているのでしょうか?
(たとえば、使用メモリの限界があるとか)もっとベターな処理系がありましたら、
教えていただければ幸いですが。
0486デフォルトの名無しさん
NGNGNDP(FPU)はPentium以降のCPUなら初めから内蔵しています。
Windows 2000が動く環境ならば気にする必要はありません。
DOSエクステンダはMS-DOS上で32Bit環境を使うための物です。
これもWindows 2000上でWin32用のawkを使う分には関係ありません。
その本は出版当時主流だったMS-DOS上の処理系を使うことを
前提に書かれていますのでそのような記述がありますが、
Windows 2000上では今お使いの処理系で特に問題ないと思います。
0487485
NGNGありがとうございます。
0488デフォルトの名無しさん
NGNG機能拡張はウジャウジャありそうだけど…
0489デフォルトの名無しさん
NGNG>next file文はnextfileに変更された
>FSに空文字列がセットされたときの動作と、 splitの第三引数に空文字列を渡したときの動作
>RSが正規表現のときの動作
>IGNORECASEの値が、文字列比較だけでなく、正規表現演算にも適用されるようになった
0490デフォルトの名無しさん
NGNGサンクス。
やはり --posix で動くように書いていた方がいいのかなぁ
0491デフォルトの名無しさん
NGNGawkがさっぱり理解できません。
どこかわかりやすく解説されてるHPがあれば教えてもらえませんか?
0492デフォルトの名無しさん
NGNGさしあたり
ttp://www.vector.co.jp/soft/dos/util/se006218.html
ttp://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/awk.html
0493デフォルトの名無しさん
NGNGttp://www-6.ibm.com/jp/developerworks/linux/010413/j_l-awk2.html
ttp://www-6.ibm.com/jp/developerworks/linux/010622/j_l-awk3.html
0494デフォルトの名無しさん
NGNGありがとうございます。
授業で初めて知ったレベルなのでかなりわかってないかと。
組込み関数にどんなのがあるか、その使い方とか文法とか
全てさっぱりでして(^^;
0495デフォルトの名無しさん
NGNGawk -v outfile="${OUTFILE}" -v date="$(date "+%Y%m%d")" '
BEGIN{
outfilename=""
if(outfile ~ /\.[^\/\.]*$/){
extension=splitoutfile[(split(outfile, splitoutfile, "."))]
print (substr(outfile, 1, (length(outfile)-(length(extension)+1))))(date)"."(extension)
}else{
print (outfile)(date)
}
}
' /dev/null
${OUTFILE}には/home/hogehoge/log.txtとかのファイル名を入れておいて、拡張子の前に日付を入れたいのです。
/home/hogehoge/log.txt→/home/hogehoge/log20040525.txtってな感じに。
拡張子がなかったらそのままケツに日付がつけばいいです。
/home/hogehoge/log→/home/hogehoge/log20040525ってな感じに。
置換でうまくできないかなぁ。
0496デフォルトの名無しさん
NGNG複数ファイルオープンってできないの?
0497デフォルトの名無しさん
NGNGttp://www.linux.or.jp/JM/html/GNU_gawk/man1/gawk.1.html
0498デフォルトの名無しさん
NGNGおまえはアフォか?
0499デフォルトの名無しさん
NGNGDOS(WIN含む)環境に、SORTFとAWKがあればコマンドライン操作は天下無敵。
MS-DOSが流行っていた頃、BASICでなくAWKとバグなしSORTがあったら
パソコンの使われ方は変っていただろうと思う。
ところで、私はWINDOWS上でGNU-AWKを使っている。
「スクリプティング言語資料室(仮)」内の
ttp://www.kt.rim.or.jp/~kbk/gawk/gawk_toc.html
から辿っていってほしい。
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNGhttp://www.xxxx.nu/upload/upload.cgi?page=Download&dir=&sort=date&filename=dq5tn.mid
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGttp://www.vector.co.jp/soft/win95/util/se000882.html
A,Bの2グループのAグループだけに存在する要素を探す事も出来きる。
これはポーティング元の性能が良いからなんですけどね。
0504デフォルトの名無しさん
NGNG確かに動きが違うわな。
純粋が好きなら
ttp://www.cs.bell-labs.com/cm/cs/awkbook/index.html
をどうぞ。
0505デフォルトの名無しさん
NGNG> MS-DOSが流行っていた頃、BASICでなくAWKとバグなしSORTがあったら
あったらも何もAWKとSORTFはDOS全盛の頃の定番ツールですが
0506デフォルトの名無しさん
NGNGその頃はX68kでgccやμemacsとか動いてたな。
メモリ数メガでよくやってたもんだ。
当時awkは詐欺みたいな言語に見えたな。
C言語覚えた後、結局使う事はなかった。
0507デフォルトの名無しさん
NGNGawkで済む事をわざわざCで書くことはない
0508デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/soft/dl/dos/util/se000208.html
ここで落とせるけれど、新旧2版があって
「256倍」本は2.15.2+1.1のほう準拠になってる。
2.11.1+3.0のほうではたとえば
FIELDWIDTHS組み込み変数が使えなかったんで往生した。
普通安定考えて古いほう使う癖がついていたんだが反省��。
0509デフォルトの名無しさん
NGNGすこし考えてみたが、シンプルにはならんと思う。
awkにはdirnameとbasenameに分離して渡して、IFSをdotにすれば少しは簡単になるが
basename自体に複数のdotが存在しなければ良いのだが
basename自体に複数のdotが存在する場合がアタマイタイ
仕様のこの点の説明が無いのでここまで
0510デフォルトの名無しさん
NGNG(OS付属とかの)awkで複数ファイルをオープンするとかできないの?
外部ファイルのテーブルのデータを使って、
入力を切り分けしたい場合があったんで。
もうperlで組んじゃったけど。
0512495
NGNG考えてくれてありがとうございます。
なるほど、dirnameとbasenameで分ける方法もありますね。
basenameにはdotがあったりなかったり複数あったりします。
仕様は、
・dotがない場合→末尾にdateを付ける
・dotが一つの場合→dot以降を拡張子と見なし、拡張子の前にdateを付ける
・dotが末尾に在る場合→dotの前にdateを付ける
・dotが複数ある場合→一番最後のdot以降を拡張子と見なし、拡張子の前にdateを付ける
って感じです。
う〜ん、if使ってるのがちょっと気に食わないんですよねえ。
>>511
OSはUNIX(HP-UX)っす。
0513デフォルトの名無しさん
NGNGgetline a < ”aa.a”
しかし俺はあんまり複雑なものは好みじゃないんで、
なんとかフィルタの連続にしようとするな。
0514デフォルトの名無しさん
NGNG1)外部ファイルのテーブルを入力としてawkのfunctionを出力するフィルタを書く
2)本処理用のスクリプトでは1が出力したfunctionを -f で取り込んで使う
と言う風に組むのも一手。
(プログラムを出力するプログラムってカーニタンが好きなパターンだよね)
0515デフォルトの名無しさん
NGNGトランスレータでも作ろっかな…。
0516デフォルトの名無しさん
NGNG面白そうだったから、awkじゃないけど考えてみた。
d=`date +%Y%m%d`
sed '/\.\([a-z0-9]*\)$/s||'$d'.\1|
/\(^|\/\)[a-zA-Z0-9]*$/s/&'$d'/
'
0517495
NGNG面白そうなんでやってみたんですけど、エラーが出てしまいますた。
sed: -e expression #1, char 70: Unterminated `s' command
sedは詳しく知らないので使い方教えてくれませんか?
0518デフォルトの名無しさん
NGNGperlで適当に書いたほうが早い。
そういう時代になった。
0519デフォルトの名無しさん
NGNGAwk が使えるようになったら sed は一行モノしか書かなくなっ
たし、その awk も今じゃ「建前」として移植性が必要な場合し
か書いてないなぁ。Gawkism が抜けなくて、欝。
力技だけど、こんなんでどう。最初の置換で8桁の日付けを末
尾に付加して、次の置換で接尾辞と日付けを入れ替えてる。
y10k問題で 7996年後は使えないけど。
echo $OUTFILE | sed -e 's/$/'`date +%Y%m%d`'/' -e 's/\(\.[A-Za-z0-9]\{1,\}\)\([0-9]\{8\}\)$/\2\1/'
0520516
NGNG2つ目のsedコマンド間違ってた。
こっちが正解。でも>>519のがいいかも。
d=`date +%Y%m%d`
echo $OUTFILE |
sed '/\.\([a-z0-9]*\)$/s||'$d'.\1|
/\(^|\/\)[a-zA-Z0-9]*$/s//&'$d'/'
0521デフォルトの名無しさん
NGNG・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる
などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?
【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
http://pc5.2ch.net/test/read.cgi/tech/1086878505/
HSP>>>>>>>>>>>>>C=糞w
http://pc5.2ch.net/test/read.cgi/tech/1071899663/
今日もどこかでHSP初心者が質問ですP19
http://pc5.2ch.net/test/read.cgi/tech/1084089079/
HSPについて
http://pc5.2ch.net/test/read.cgi/tech/1085149790/
0523デフォルトの名無しさん
NGNGhttp://lufia.org/plan9/src/luna.rc
http://lufia.org/plan9/man/luna.txt
http://lufia.org/plan9/src/dryad.awk
http://lufia.org/plan9/man/dryad.txt
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNGもしくは$0から$1を削除するってことなんだけど
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG即レスありがとうございました。
もうちょっと調べてから質問します。ゴミンよ
0528デフォルトの名無しさん
NGNGsed が実行を止めてしまうと書いてありますが、 GNU sed は
N が失敗した後、b と同じ動作をしているみたいに思えるのですが、
この理解はあってますか?
0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
NGNGN や b はわかりますか?
0531デフォルトの名無しさん
NGNGGNU の拡張。
version 4.0.8 までは N に失敗すると、 オプション -n 等で出力を抑制していない場合、
パターンスペースを出力して終了していた(ラベルなし b を実行しているようにも見えるか?)。
4.0.9 以降は環境変数 POSIXLY_CORRECT を設定すればこの出力を止められるようになった。
4.1 以降はオプション --posix で GNU の拡張を止められるようになった。
以上がソースを見てわかったこと。
0532デフォルトの名無しさん
NGNGUNIX板にsedスレあるのでそっちへどうぞ
0533デフォルトの名無しさん
NGNGなんかわけのわからん拡張ていうか改変だな。
どんな役立つ場面を考えてそんな風に変えたんだろうか。
0534デフォルトの名無しさん
NGNGinfo sed の Reporting Bugs より
`N' command on the last line
Most versions of `sed' exit without printing anything when the `N'
command is issued on the last line of a file. GNU `sed' prints
pattern space before exiting unless of course the `-n' command
switch has been specified. This choice is by design.
For example, the behavior of
sed N foo bar
would depend on whether foo has an even or an odd number of
lines(1). Or, when writing a script to read the next few lines
following a pattern match, traditional implementations of `sed'
would force you to write something like
/foo/{ $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N }
instead of just
/foo/{ N;N;N;N;N;N;N;N;N; }
In any case, the simplest workaround is to use `$d;N' in scripts
that rely on the traditional behavior, or to set the
`POSIXLY_CORRECT' variable to a non-empty value.
うーん、1個目の例がなんで最終行を出力する理由になってるのかよくわからないし、
2個目はなんだよ面倒臭いだけかよって感じです。
0535デフォルトの名無しさん
NGNG今まで-vオプションで渡してたわ。
0536デフォルトの名無しさん
NGNG>>532は素人じゃて
0537デフォルトの名無しさん
NGNG理由を教えてください.
while ( (getline line < "hoge.txt") > 0 ) {
その 1:
if ( line ~ /^[0-9]/) {
...
}
その 2:
if ( match(line, /[0-9]/) == 1) {
...
}
}
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGちがうね
0540デフォルトの名無しさん
NGNGオブザベーション単位で処理をしているのなら可能なのかなと。
0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNG0543541
NGNG0544537
NGNG入力ファイルをいろいろ削ってみたりして,問題を特定しようと試みました.
しかし,確かなことは分かりませんでした.
ただ,match の方が期待通りです.
ところで,以下で `...' の行が出力されるのはなぜ?
入力ファイル:
1,100,1000,...
2,200,2000,...
...
10,1000,10000,...
11,1100,11000,...
awk ファイル:
BEGIN {FS=",";}
/^[0-9]/ { print $1; }
match にすると出力されません.$0 ~ /^[0-9]/ の省略ではないのでしょうか.
0545537
NGNG0546デフォルトの名無しさん
NGNG俺の環境では `...' は出力されないんだけど
0547デフォルトの名無しさん
NGNGif ( line ~ /^[0-9]/) {??# 1文字目が0-9
if ( line ~ /[0-9]/) {?? # 0-9がある
0548541
NGNG>>544-545
おれの環境では期待通りの出力になる。
GNU Awk 3.1.3
>>537
これもおれの環境では期待通り(頭が数字のレコードが真となる)の出力になった。
hoge.txtの中身と、どんな出力を期待しているのか教えてけろ。
0549537
NGNG# cat hoge.txt
1,100,1000,...
2,200,2000,...
...
10,1000,10000,...
11,1100,11000,...
# cat a.awk
BEGIN {FS=",";}
/^[0-9]/ { print $1; }
#match($0,/[0-9]/) == 1 { print $1; }
# gawk -f a.awk < hoge.txt
1
2
...
10
11
コメントアウトを /../ の方にして,,,
# gawk -f a.awk < hoge.txt
1
2
10
11
これが期待する動作です.GNU Awk 3.1.4
0550デフォルトの名無しさん
NGNGWindows上のGNU Awk 3.1.2では同じ結果(下の方)になる。
0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNGmawkだと期待どおりの結果になる。
gawkはLANG=CだとOK、LANG=ja_JP_eucJPだとNG。
0553537
NGNG> gawkはLANG=CだとOK、LANG=ja_JP_eucJPだとNG。
それです! 環境を書かないでごめんなさい.
いつから壊れて (?) いるんだろう...?
とりあえず全て match で書いてしまいました.
あまり長いものは awk で書かれないから,
「とりあえず」でもいいところがいいですね.
0554537
NGNG0555カメソライダー
NGNG0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG> いつから壊れて (?) いるんだろう...?
3.1.3 は無問題。
3.1.4 は駄目。
0558デフォルトの名無しさん
NGNG#! /usr/bin/gawk -f
なら正しく動くのですが,
#! /usr/bin/env gawk -f
では実行するときのコマンドが awk プログラムと認識され parse error になります.
なぜなのでしょうか.
0559デフォルトの名無しさん
NGNG改行が \r や \r\n になっているとか?
0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG/usr/bin/env "gawk -f" foo
という呼ばだしになるはずなんで、"No such file or directory"
あたりのエラーメッセージが出るはずなんだが。
0563デフォルトの名無しさん
NGNG0564デフォルトの名無しさん
NGNG挙動は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によっててんでばらばら
なのであまりお勧めできないということだろうか。
0565dos窓でawk
NGNG行頭に「|」半角の縦棒がある行だけprintしようとしたのですが、
うまくいきません。どうしたらいいのでせうか?
0566デフォルトの名無しさん
NGNG半角の縦棒は正規表現のメタ文字だから '\' でエスケープする
例:
#!/bin/awk -f
/\|/ { print }
「うまくいきません」だけでなく、実際のスクリプトや、
期待した結果と得られた結果がどう違ったかも具体的に書いてね
0567デフォルトの名無しさん
NGNG/^\|/ { print }
だね。
0568デフォルトの名無しさん
NGNG早速ありがとうございました。うまくいきました。
実際のスクリプトですが下記のような形で書いておりました。
$0 ~ "~\|" {print}
そうしましたら、半角縦棒があろうが無かろうが出力されてしまいました。
括弧でくくってみたりもしましたが
$0 ~ (^\|){print}
^parse error
でした。今回は行頭なので教えていただいたスクリプトで行けそうですが、
もしも、$2や$3などで指定したいときなどはどうすればいいのでしょうか?
ええと
0569デフォルトの名無しさん
NGNG0570dos窓でawk
NGNG大変参考になりました。たすかります。
どーもでした。
0571デフォルトの名無しさん
NGNGa,
b,
c,
d,
e
);
inputa;
input[3:0]b;
inoutc;
outputd;
output[7:0] e;
hogef;
これを
a input
b input [3:0]
c input
d output
e output [7:0]
のように整形するにはどのように書いたらいいのでしょう。
{ if($1 ~ /input/ | $1 ~ /output/)
{print $2,$1,$3}
}
だと[3:0]がある行がおかしくなるし。
レコード毎にフィールド数みて2つだと{print $2,$1}で
3つだと{print $3,$1,$2}って分岐させればいいのかな
わかる方お願いします。
0572デフォルトの名無しさん
NGNGinput[3:0]b;
inoutc;
outputd;
output[7:0] e;
hogef;
これを
???どれ
0573デフォルトの名無しさん
NGNGmodule sample(
a,
b,
c,
d,
e
);
input a;
input [3:0] b;
inout c;
output d;
output [7:0] e;
hoge f;
↑が入力です。
sample( )内の文字列とそれに対応するinput/output を
a input
b input [3:0]
c input
d output
e output [7:0]
のように出力したのです。
0574デフォルトの名無しさん
NGNGinout は input にするのか?
0575デフォルトの名無しさん
NGNGinputの間違いです><
0576デフォルトの名無しさん
NGNGあたりで。いらない「;」やお尻の空白はsedで削った方が楽だと
思うのでとりあえず放置したがgsubとかしてもいいよ。
0577デフォルトの名無しさん
NGNGでええやん
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNG0581shige
NGNG0582デフォルトの名無しさん
NGNGsed -e s/\$file/$file/g hoge
これもっと奇麗にならない?
0583デフォルトの名無しさん
NGNGset file = ..\\/scr\\/awk\\/path.list
sed -e s/\\$file/$file/g hoge
これもっと奇麗にならない?
0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNGsedの場合、正規表現にs|./hoge|./ore|gとかs/{/usr/bin}/{/usr/local/bin}とかが出来なくて、
バックスラを/の前に付ける必要があり、よくありません。
awkを使うと余裕なんでしょうか?正規表現やSEDの使いかたに問題があるだけ?
ゾーンにはいってしまっています。
0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNGawkについてはawkを語らない
0592デフォルトの名無しさん
NGNGているので、-e "s|./hoge|./ore|g" とクォートしてやればいいのだが。クォー
トがいやなら、, とか解釈されない文字を使えばいい。
ただ、不思議なことしたいんだね。hoge を ore に置き換えるのはともかく、/
の前の任意の一文字を . に置き換える処理って想像がつかない。
0593デフォルトの名無しさん
05/01/28 06:27:330594デフォルトの名無しさん
05/01/28 15:55:50perl -wpe 's#^(.+?)/hoge#$1/ore#g'
みたいな事なんだろうな。
0595デフォルトの名無しさん
05/01/29 00:19:470596595
05/01/29 00:21:33595ネ
0597デフォルトの名無しさん
05/02/06 22:33:210598デフォルトの名無しさん
05/02/12 11:50:48print | "sort" |getline
とやってみたら、だめでした。なんで動いてくれないの。
一度ファイルに書き出せばできましたが、ファイルに書き出ししない方法はないでしょうか。
0599デフォルトの名無しさん
05/02/13 23:32:46読み終らないと出力できないからだと思うが。
2つのスクリプトにして、
awk -f script1.awk file | sort | awk -f script2.awk
とでもする? getline も多分使わなくてよくなるし。
0600デフォルトの名無しさん
05/02/16 22:04:46書庫破損してるっぽい。
ttp://www.kt.rim.or.jp/%7Ekbk/index.html
0601デフォルトの名無しさん
05/02/17 00:42:14試しにダウンロードして解凍してみたけどちゃんと解けてる.
0602デフォルトの名無しさん
2005/05/26(木) 09:26:22↑ AWK のコンパイラってあるんだね。Perl や Ruby がスクリプト言語の
王道であるにしろ、言語を人間の思考を描きだす道具であるとするならば
AWK にも Perl や Ruby にも劣らないだけの個性があると思うんだよね。
次スレのテンプレには awklisp とか tawk コンパイラのリンクを載せたり
して盛り上がればイイなぁ。前にデータベースに問合せて出力されたデー
タを awk で整形して、シェルを使って処理させるための対話型 FEP 作っ
たけど ( 500 行弱 ) あの時ほど awk に感謝したことはなかった。
ところで皆様はどんな時に awk を使っていますか?やっぱり Unix じゃ
ないとイケないのかなぁー。
0603デフォルトの名無しさん
2005/05/26(木) 12:52:47> ところで皆様はどんな時に awk を使っていますか?
cutの使いかたを思い出すのが面倒くさい時。
0604デフォルトの名無しさん
2005/05/26(木) 13:40:13使い捨てで、perlで書くより楽そうなとき。
perlより楽ってのは人によると思うが、オレがそう思う
のは、複雑な文字列操作や正規表現で置換とかはやらないで、
$nでフィールドとりだして連想配列でごにょごにょぐらいで
済むときかな。
awk '{a+=$1}END{print a}'
とか、
awk '{a[$1]+=$2}END{for(i in a){print i,a[i]}}'
みたいのはほとんどイディオムとなっていてよく使う。
逆にある程度の規模でスクリプト書くとかなるとほとんど
perlです。
0605デフォルトの名無しさん
2005/05/28(土) 03:16:23趣味のprogrammingする時
0606デフォルトの名無しさん
2005/05/28(土) 10:14:11いま Compiler 読んでるから、読了したら習作として Scheme で AWK コンパイラ書い
てみようかな。本当は Scheme で仮想マシンを実装して、中間コードで実行してみたい
んだけど Scheme の多倍長計算の機能はそのまま引き継げるかなぁ?多倍長計算をする
AWK なんてカッコよすぎる!
蟹御飯先生の AWK の実装も公開されてるし、いい C の復習にもなりそう。もしかして
自作の AWK とか実装した人いますか? >ALL
0607デフォルトの名無しさん
2005/05/28(土) 15:09:46ツールを自作することまではしない
Perlという前例は存在するにしても、結局劣化コピーになるし
0608デフォルトの名無しさん
2005/05/30(月) 21:41:50Perlの載っていないUNIX機でちょっと便利なスクリプトを書くとき。
ユーザーの俺が書いた30行足らずのスクリプトを理解できないベンダーSEってどうよ。
Emacsでログ追うのにカーソルキーしか使わないし。
シェルスクリプト書くのにcsh使うし。(すまん愚痴になった)
0609デフォルトの名無しさん
2005/05/31(火) 15:05:40それがベンダーSEクオリティ
0610デフォルトの名無しさん
2005/06/05(日) 02:14:51あああ いいい ううう えええ おおお ・・・ んんん
ってログがあった場合に、「あ」と「い」を入れ替えて
いいい あああ ううう えええ おおお ・・・ んんん
としたいときにはawk使ってどうやります?
0611デフォルトの名無しさん
2005/06/05(日) 02:17:52思いつき
1.あ を 出てこなさそうな文字(ぱっと思いついたのが"^")にいったん置き換える
2.い を あ にする
3.先の文字を い にする
0612デフォルトの名無しさん
2005/06/05(日) 02:27:22もし明確に $1 と $2 だってわかってるなら
{printf("%s%s%s", $2,OFS,$1);
for(i=3; i<=NF; ++i) printf("%s%s",OFS, $i);}
0613AWK初心者
2005/07/14(木) 22:22:04にあるやつ手伝ってください。
0614デフォルトの名無しさん
2005/07/14(木) 22:33:190615デフォルトの名無しさん
2005/07/14(木) 22:40:01それで? 「手伝って」とのことだが、自分ではどこまでこなしたのだね?
0616t
2005/07/15(金) 00:09:44良い問題じゃん。
問題の並べ方は変だけれど。
自分で解いて
[email protected]
に送ろうか知らん。2ちゃんで見ましたって書いて。
4 このテキストに含まれる文はいくつあるか調べよ。
は、
{}
END{
print NR;
}
だとおもう。1行1文になっているようだから。
あやしければ、
BEGIN{
s=0
}
{
n=gsub(/[。!!??]/,"\f",$0)
s=s+n;
}
END{
print s;
}
句点「。」や ? !
で区切られていれば」文だから。
0617デフォルトの名無しさん
2005/07/15(金) 01:43:093行目と4行目で一つの文章だから一行一文ではないし、
一単語の「たべもの」が「たべ」と「もの」に分割されていたり、
格助詞の「に」と「似る」の語幹の「に」を判別しなきゃならなかったり。
0618デフォルトの名無しさん
2005/07/15(金) 03:22:42END{ print NR; }
742
0619デフォルトの名無しさん
2005/07/15(金) 03:56:37なのかも
0620デフォルトの名無しさん
2005/07/15(金) 19:32:510621613
2005/07/20(水) 11:49:540622デフォルトの名無しさん
2005/07/22(金) 07:35:180623デフォルトの名無しさん
2005/07/22(金) 09:01:41書籍ではありませんが、
1991年4月1日
例題で学ぶ 簡易言語「AWK」
弘前大学 教育学部
教育実践研究指導センター
小山智史
が分かりやすいです。
どこかにあると思うので、探しましょう。
昔、アスキーのおまけディスクについていました。
0624デフォルトの名無しさん
2005/07/22(金) 19:04:12私は「256倍」本でしたが、、、、
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756101623/249-2185545-6517934
0625デフォルトの名無しさん
2005/07/24(日) 00:01:08ttp://w3.shinkigensha.co.jp/books/4-7753-0249-3.html
0626デフォルトの名無しさん
2005/07/24(日) 09:38:39>>625
その2冊は、
>awk勉強しようと思うんですけど awk初心者から学べる本ってないですか?教えて下さい
という人には難しすぎて向きません。
多分プログラミング初心者だと思われます。(cが使えるような人なら、自分でいくつかのawk script を検索して、使えるようにするから)
0627デフォルトの名無しさん
2005/07/24(日) 10:54:33お勧め出来ない
0628デフォルトの名無しさん
2005/07/24(日) 18:15:510629デフォルトの名無しさん
2005/07/24(日) 18:56:42http://www.oreilly.co.jp/books/4900900583/
0630デフォルトの名無しさん
2005/07/30(土) 22:02:26perlで書くとこんな感じの処理です。
for my $i (sort(keys(%hoge))){
print($i, %hoge{$i} . "\n");
}
0631デフォルトの名無しさん
2005/07/30(土) 22:28:561.添え字を取り出して別の配列につっこむ
2.別途用意したソート関数で並び替える
3.本来の処理をする
という感じかな。
2の関数はquick sortでよければサンプルはそのへんに転がってるだろう。
0632デフォルトの名無しさん
2005/07/30(土) 23:35:250633630
2005/07/31(日) 09:54:52quicksortというのを初めて知りました。
awkのプログラムは見つけられませんでしたが、
他のソースを見て作ってみたいと思います。
>>632
出力するイメージ的には、↓のような表な感じですので、
表題までソートされてしまうとダメなんです。
表題
時刻 値
時刻 値
時刻 値
時刻 値
なのでawk内でソート処理をしたいんです。
とりあえず現状は表題をソートの一番上にくるような文字列にしてsortコマンドをかませていますが。。。
0634デフォルトの名無しさん
2005/07/31(日) 11:19:300635デフォルトの名無しさん
2005/07/31(日) 12:08:170636630
2005/07/31(日) 12:21:45その「データ」をawkで生成してるんです。
だから634さんの方法だと↓な感じになりますよね?
awk '{表データ作成}END{表データ出力}' 読み込みファイル | sort | awk 'BEGIN{print "表題"}{print}'
でも実は表題は読み込みファイルを処理して生成されるので、
awk '{表データ作成;表題生成}END{表題出力(sortで一番上に来させる為に半角スペースを加えて);表データ出力}' 読み込みファイル | \
sort | \
awk 'NR=1{print}NR>1{print}'
という風に邪道な方法で表題を一番上に表示させるようにしています。
今回はsortキーが時刻ということが分かっていますので、表題は頭にスペースを入れることで解決出来ますが、
sortキーがどんな文字列かがわからない場合、この方法は使えませんので、awk内でソート処理をしたいと思った次第です。
0637デフォルトの名無しさん
2005/07/31(日) 12:42:040638デフォルトの名無しさん
2005/07/31(日) 15:50:06オレはそこまでややこしくなったらperl使うけどな。
0639デフォルトの名無しさん
2005/08/01(月) 04:47:502章も言語マニュアルなのに読んでてためになる筆運びに感心。
ですが例題集は2題くらいで頭がバーストして挫折してまする。
難解数学パズルを最短距離でさらっと解いてしまう
先生の知能指数の高さにため息が出ますわ。
馬鹿はUNIXに向いてないんでしょうね。べーしっ君に戻りますか
0640デフォルトの名無しさん
2005/08/01(月) 10:22:23本として完成したものはさらっとしているが、
本を書いている段階では何度も試行錯誤して
間違いを見つけては直し、思い直しては書き換え、
という作業を繰り返した結果だと
「プログラミング作法」で書いてるから
それほど悲観するものではないと思われ
0641デフォルトの名無しさん
2005/08/01(月) 10:53:120642デフォルトの名無しさん
2005/08/02(火) 22:29:02微妙な下ネタもあって好きだったなぁ・・・
当時としてはかなりシュールだったし。
0643デフォルトの名無しさん
2005/08/03(水) 19:01:13例えば以下のような文字列の場合、
A B C D E F G
(全角スペースで区切っていますが、本当は半角スペースです)
第4フィールド以降の文字列、
D E F G
を取得したいです。
0644デフォルトの名無しさん
2005/08/03(水) 19:37:05自信は無いが、気が向いたので書く。
awk '{for(i=4;i<=NF;i++){printf $i " "}printf "\n"}'
とか、
awk '{for(i=4;i<=NF;i++){LINE = LINE $i " "}printf LINE "\n"}'
0645デフォルトの名無しさん
2005/08/03(水) 19:56:52a=$0
sub(/^([^ ]+ +){3}/, "", a)
あたりですかね。正規表現に+や{3}が使えないawkのときは
適当に直してくれ。
区切りが空白1つに置き換わってよければ
$4〜$NFを空白はさんでつなげるという手もある。
0646643
2005/08/03(水) 20:42:11>>644
んー、それだと、
D E F G
になってしまいますよね。
フィールド間の区切文字は保持したいんです。
>>645
置換ですね。
それでちょっと試してみたいと思います。
0647デフォルトの名無しさん
2005/08/04(木) 06:23:50表題はBEGIN{}の中でprintすりゃいいんじゃね?
0648630=633
2005/08/04(木) 08:22:29表題はファイルを処理して生成されるので、BEGINの中ではprint出来ないんです。
まあgetlineでファイルを読めば出来るけど、それではファイルを2回読むことになって非効率的かなぁと。
0649デフォルトの名無しさん
2005/08/04(木) 22:26:26表題が1行目に入っているなら、
NR==1{}
NR>1{}
で場合分けする
0651デフォルトの名無しさん
2005/08/05(金) 11:53:51END{}で表題と表題以外の部分を全部出力すればいい
・・・いや
統計結果(表題)を求める機能と表題以外の部分を求める機能は別物だと考えれば、分けて作ってcatするのも手だな。
#こちらに話題がshiftするとスレ違いになってしまうかもw
0652630
2005/08/05(金) 23:29:04>END{}で表題と表題以外の部分を全部出力すればいい
表題以外の部分はソートされないですよね?
>統計結果(表題)を求める機能と表題以外の部分を求める機能は別物だと考えれば、分けて作ってcatするのも手だな。
分けて作る方法も考えたのですが、以下の理由でやめました。
・同じファイルを2回読むのは非効率的?
・2回目読み込み前にファイルが更新された場合、表題と表で不整合が発生する?
0653デフォルトの名無しさん
2005/08/05(金) 23:41:01データ処理して作っている表題は、具体的にどんなデータ?
それだけ、別の変数に入れておいて
データとは別に、最初に出力すれば良いだけではないかなぁ?
0654630=652
2005/08/05(金) 23:57:25表題は、ファイル中に書かれた数値の「最大値と最小値」です。
>データとは別に、最初に出力すれば良いだけではないかなぁ?
↓のような感じですか?これだと表部分がソートされないので困っています。
かと言って、この出力をsortに渡したら表題もソートされてしまいます。
END{
print(hyoudai) #表題出力
for(i in data){ #表出力
print(i, data[i])
}
}
0655デフォルトの名無しさん
2005/08/06(土) 00:48:130656デフォルトの名無しさん
2005/08/06(土) 02:03:19表題の後ろにくっつければ?
0657630=652
2005/08/06(土) 07:09:00その本は読んでないのでわからないです。
>>656
なるほど。「2行目以降をソートする」ということですね。
>headとtailで切り分けて
awkの出力結果を、変数かファイルに保存して、表題と表部分を抜き出すということですよね。
なるべく変数やファイルを使わないでワンライナーで実現したいのですが方法はないでしょうか。
0658デフォルトの名無しさん
2005/08/06(土) 07:47:44なにかのパズルですか?
実用にするだけならば、以下のようなのをさっさと書いて処理を済ませますが。
{
data[NR]=$0;
if(max<$0){max=$0}
if(min>$0){min=$0}
}
END{
printf"表題 最大値=%s\t最小値=%s\n",max;min; #表題出力
#バブルソートでもデータ量が少ないと速いよ
for(i=1;i<NR;i++){
for(j=i;j<=NR;j++){
if(data[i]<data[j]){ #昇順・降順は<>を変えて
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
}
for(i=1;i<=NR;i++){ #表出力
print(i, data[i])
}
}
0659デフォルトの名無しさん
2005/08/06(土) 09:52:13「実現できれば良い」なのか「シンプルな解が欲しい」なのかがはっきりしていない罠
前者ならもう答えは出ているし、
後者ならその答えは「教えられて得るべき種類の答え」ではないと思うが
0660デフォルトの名無しさん
2005/08/06(土) 13:21:19HEAD 表題
TABLE 表
:
って最初のEND部で出力して | sort | awk '{ 2番目のフィールド以降を表示 }'
0661デフォルトの名無しさん
2005/08/06(土) 14:11:41ふつう index()とsubstr() つかわねーか?
0662デフォルトの名無しさん
2005/08/06(土) 14:27:41これでええのんか?
{ data[n++]=$0; }
END{
print "1行目は表題ね";
for(i in data) print data[i] | "sort";
}
0663630=657
2005/08/06(土) 14:49:10バブルソートという方法でソート出来るんですね。
クイックソート、バブルソートと試してみます。
>>659
「実現できれば良い」は自己解決していました。
しかし自分の知らない他の案もあるのかな、と思い書き込みました。
なぜ、「シンプルな解」は「教えられて得るべき種類の答え」ではないのでしょうか?
自分で考えてひらめいて発見することも大事ですが、教えてもらって得てもいいと思います。
>>660
今はその方法を使っています。
HEAD,TABLEではなく、1,2といった番号ですが。
0664デフォルトの名無しさん
2005/08/06(土) 15:01:570665デフォルトの名無しさん
2005/08/06(土) 17:57:41バブルソートという「馬鹿ソート」さえ知らないことから考えて、
スクリプト内でソートする方法が知りたかったんだろうと思う。
data.sort
だけでソートできる他の言語を囓っていて、「awkにはないんかい?」と思うのは、まぁあり得るかなぁ。
0666デフォルトの名無しさん
2005/08/06(土) 20:19:43すいません。。。
>>665
そうです。最初に質問した通り(>>630)、awk内でソートする方法が知りたかったんです。
awkにソート関数がないのは知ってましたが、ソートしたい場合どう対応するのかなぁと。
ソートアルゴリズムはいろいろようですね。
自作ソート関数を作って対応します。一度作ればいろいろ使えそうですし。
とりあえずこの件は解決ということでお願いします。
ありがとうございました。
0667630=666
2005/08/06(土) 20:21:02666=630です。
0668デフォルトの名無しさん
2005/08/07(日) 14:06:50>662 は読んだのか?
0669デフォルトの名無しさん
2005/08/07(日) 23:52:33どやんの?
0670デフォルトの名無しさん
2005/08/08(月) 00:30:42/^ *[^ ]+ +[^ ]+ +[^ ]+ +[^ ]/ {
match($0, /^ *[^ ]+ +[^ ]+ +[^ ]+ +/)
print substr($0, RLENGTH+1)
}
0671>669
2005/08/08(月) 01:52:263から全部なら...
substr($0, index($0,$3))
0672671
2005/08/08(月) 01:59:44$1〜$3に$4と同じ文字列があると使えないけどな
0673630
2005/08/11(木) 11:00:40拾ったソースをユーザー定義関数化しただけですが。。。
#バブルソート
# 引数
# 1 配列(添え字は1からの連番)
# 2 添え字の最大値
# 3 ソートの方向(昇順:0,降順:1)
function bsort(array, num, order, i, j, temp){
for(i=1;i<num;i++){
for(j=i;j<=num;j++){
if((order == 0 && array[i] > array[j]) || (order == 1 &&array[i] < array[j])){
temp=array[i]
array[i]=array[j]
array[j]=temp
}
}
}
}
0674630
2005/08/11(木) 11:01:15# 引数
# 1 配列(添え字は1からの連番)
# 2 ソート開始行
# 3 ソート終了行
# 4 ソートの方向(昇順:0,降順:1)
function qsort(v, left, right, order, i){
if(left >= right){
return
}
swap(v, left, int((left+right)/2))
last=left
for(i=left+1;i<=right;i++){
if((order == 0 && v[i] < v[left]) || (order == 1 && v[i] > v[left])){
swap(v, ++last, i)
}
}
swap(v, left, last)
qsort(v, left, last-1, order)
qsort(v, last+1, right, order)
}
function swap(v, a, b, temp){
temp=v[a]
v[a]=v[b]
v[b]=temp
}
0675630
2005/08/11(木) 11:03:12bsort
real 10m2.810s
user 10m2.247s
sys 0m0.810s
qsort
real 0m2.199s
user 0m2.170s
sys 0m0.076s
sortコマンド
real 0m0.239s
user 0m0.154s
sys 0m0.153s
TEST PC
CPU:Pen4 2.8G HT
RAM:1G
awk:cygwin GNU Awk 3.1.4
TESTFILE:15,187line
0676デフォルトの名無しさん
2005/08/11(木) 11:46:35エライ・・・というか。真面目な人ですね。面白かった。
#bsortが異様に速い気がするけど・・・まあデータに依存するしな
0677デフォルトの名無しさん
2005/08/12(金) 15:12:05微妙にバグがw
しかもバブルソートではないし。。。
2つめのるーぷはfor(j=i+1;j<=num;j++)
(たしか単純選択法とかいってた希ガス)
単純なバブルソート
for(i=2; i<=num; ++i){
temp=array[i]
for(j=i; j>1 && array[j-1]>array[j]; --j)
array[j]=array[j-1]
array[j]=temp
}
0678デフォルトの名無しさん
2005/08/14(日) 22:48:19平均値を求めるプログラムでいつも入力を
% awk -f average.awk col=3 input
と入力しているんですが、col=3 の 部分を 3とだけ入力
して計算というのは出来るのでしょうか?つまり↓の入力
にしたいんですが。
% awk -f average.awk 3 input
---------average.awk--------
BEGIN{
ave=0
}
$0!~/#/{
n++
data[n] = $col # 第 $col 列のデータを取り込む
}
END{
# 平均の計算
for(m=1; m<=n; m++)
ave = ave + data[m]
ave = ave / n
# 結果の出力
printf("%f\n",ave)
}
0679デフォルトの名無しさん
2005/08/14(日) 22:51:48for (i = 0; i < ARGC; i++)
print ARGV[i]
}'
ためしてみそ
0680デフォルトの名無しさん
2005/08/14(日) 23:27:58レスありがとうございます。下の様に書き直してみたのですが
ARGV[1] (対象の列) がデータファイルとしても読み込まれて
いる様で、上手くいきません。対応する引数のみをデータファイル
とするやり方は有るのでしょうか?度々申しわけありません。
入力
average.awk 2 test
*エラー(下記のエラーが出ます)
awk: /・・・/bin/average.awk:4: fatal: cannot open file `2' for reading (そのようなファイルやディレクトリはありません)
BEGIN{
ave=0
col=ARGV[1]
}
$0!~/#/{
n++
data[n] = $col # 第 $col 列のデータを取り込む
}
END{
# 平均の計算
for(m=1; m<=n; m++)
ave = ave + data[m]
ave = ave / n
# 結果の出力
printf("average = %f\n",ave)
}
0681デフォルトの名無しさん
2005/08/14(日) 23:33:550682デフォルトの名無しさん
2005/08/14(日) 23:39:45とすれば
0683デフォルトの名無しさん
2005/08/14(日) 23:40:58単純選択法はいちいち値を交換せず、比較だけしていくやつだ
よって>673のは違う(値を交換していくのでバブルソートになるのであろう)
0684デフォルトの名無しさん
2005/08/14(日) 23:51:43コマンドラインで指定されたファイル名が var=val という形式ならば、
それは変数への代入であると解釈されます。変数 var は値 val に設定されます
(これは、すべての BEGIN ブロックを実行したあとに行われます)。
コマンドラインでの変数の代入は、AWK が入力をフィールドやレコードに分割する
ためのセパレータを実行時に変更するのに便利です。また、1 つのデータファイル
に対し数回処理を行う必要がある場合、状態をコントロールするのにも便利です。
0685689
2005/08/15(月) 00:00:33レスありがとうございます。このやり方で解決しました。
>682
0686689
2005/08/15(月) 00:02:09>682
もともとその様にしてまして、col=3と打つのを3のみで
できないかなぁと思って質問しました。分かりにくくて
申し訳ありません。
0687デフォルトの名無しさん
2005/08/15(月) 10:25:50% ./average.sh 3 input
--- begin average.sh ---
#!/bin/sh
/bin/awk -f average.awk col=$1 $2
--- end average.sh ---
0688デフォルトの名無しさん
2005/08/15(月) 16:48:12環境依存やん
0689687
2005/08/15(月) 18:25:24command.comとかcmd.exeの場合は > になる。
csh が使えるということは Linux か BSD系、あるいはSYSVR系に
自前で入れたとか、そんな感じだろう。
だから /bin/sh が使えるのは当たり前と考えた。
っつうかawkが使えて/bin/shが使えないケースってDOS環境くらいしか
思いつかないんだけど? cygwinだって当然使えるし。
0690デフォルトの名無しさん
2005/08/15(月) 20:34:03dos or winのdos窓 環境でawkを使う人は多いと思うよ。
0691デフォルトの名無しさん
2005/08/15(月) 20:56:34どうでもよろしい
0692デフォルトの名無しさん
2005/08/15(月) 20:59:500693687
2005/08/15(月) 21:13:49690が食いついてこなければとうにお�hる。
>>690
winのDOS窓環境でawkを使う場合、awkだけを単体でインストールする人は
少ない。っていうかAWK.EXEだけを配布しているサイトなんてアリエナイ。
たいていはcygwinとか他のUnix like Toolsをインストールする。
そしてそういうツールにはsh.exeとかbash.exeとかが必ずセットでついて来る
0694デフォルトの名無しさん
2005/08/15(月) 21:38:32Vectorでgawk単体で拾ってきて使ってる私は
アリエナイ人なんですね…
0695デフォルトの名無しさん
2005/08/15(月) 22:00:24>677 のは挿入sort
この辺参照↓
ttp://www.geocities.jp/ky_webid/algorithm/index.html
0696デフォルトの名無しさん
2005/08/15(月) 22:27:02テキスト処理用のunix like tools が必要なだけで、unix環境までは要らんぞ とか、win環境が必要でその上でちゃっちゃとテキスト処理したいぞという人はアリエールと思うよ。
それとも、unix使ったら偉いとか?
0697デフォルトの名無しさん
2005/08/15(月) 22:37:02と
cygwinまで必要な人
の人数なら前者が圧倒的に多そう
そもそも
cygwin入れた人
で
cygwinでのawkが必要な人
ってほとんどいないんじゃねの?
0698デフォルトの名無しさん
2005/08/15(月) 22:53:46コーラを飲んだらゲップするくらいに。
0699デフォルトの名無しさん
2005/08/15(月) 22:54:20ttp://cm.bell-labs.com/cm/cs/awkbook/index.html
0700デフォルトの名無しさん
2005/08/15(月) 23:13:460701687
2005/08/16(火) 16:45:58まだたくさん生息していたなんて、漏れの視野が狭かった。
お詫びにバッチファイルというものを置いておく。
C:\> average 3 input
--- begin average.bat ---
@awk -f average.awk col=%1 %2
--- end average.bat ---
0702デフォルトの名無しさん
2005/08/30(火) 09:44:210703デフォルトの名無しさん
2005/08/30(火) 23:49:510704デフォルトの名無しさん
2005/08/31(水) 01:28:42ttp://home.vrweb.de/~juergen.kahrs/gawk/XML/
LLDN発表資料
ttp://ll.jus.or.jp/2005/files/lldn_awk_2005.pdf
> .XML 対応(node 単位でフィールドを扱える)
> .XML に関して入出力はUTF-8 だけでなく、EUC-JP も使用可能
> .PostgreSQL データベースの読み込み(MySQL も検討中)
> .gawk からのフォークではなく、先行開発
> .Arnold Robbins 氏好みのpatch を提供(苦笑)
> 以前、xmlgawk という名称で開発をスタートしたが、現在Xgawk と名称を変更。
> 本家gawk 3.1.5 に追従予定。(未了)
というわけで今は Xgawk という名前らしいです。
0705デフォルトの名無しさん
2005/09/03(土) 18:23:570706デフォルトの名無しさん
2005/10/05(水) 02:23:060707デフォルトの名無しさん
2005/10/05(水) 19:47:530708デフォルトの名無しさん
2005/10/16(日) 22:37:11以下の入力ファイルから、StateがFAILEDであるID
(この場合cb14ab2b-8fcf-4c36-83c3-fb2f30e69fda)を抜き出す
--入力ファイル--
Id...........: a5650e23-c2e3-4188-ab91-e2f4a21eba44
Job Name.....: OfflineClone
Submitted....: 05/10/11 18:09
Last Modified: 05/10/11 18:10
State........: COMPLETED
Id...........: cb14ab2b-8fcf-4c36-83c3-fb2f30e69fda
Job Name.....: OfflineClone
Submitted....: 05/10/11 17:47
Last Modified: 05/10/11 18:02
State........: FAILED
Id...........: 9b1f08bf-76d1-4a5d-9e19-abe07bae284d
Job Name.....: OfflineClone
Submitted....: 05/10/11 18:13
Last Modified: 05/10/11 20:11
State........: COMPLETED
--ここまで--
すいません、よろしくお願いします。
0709デフォルトの名無しさん
2005/10/16(日) 22:51:23perl=VB.NET
0710デフォルトの名無しさん
2005/10/16(日) 23:32:42/^Id/ { id = $2 }
/^State/ && $2=="FAILED" { print id }
# 但し、入力データの各欄の順序が固定されているものと仮定
0711デフォルトの名無しさん
2005/10/18(火) 11:40:01の方がよくね?完全一致よりも
0712デフォルトの名無しさん
2005/10/18(火) 12:14:28そしたら
FAILEDhoge
でもマッチングしちゃうからダメじゃない?
0713デフォルトの名無しさん
2005/10/18(火) 12:20:480714デフォルトの名無しさん
2005/10/18(火) 21:19:19全ての項目を見にいくのなら
BEGIN{ FS = ": "}
とでもするか、項目ごとに$nを適切に合わせるかすればいいんじゃない?
0715デフォルトの名無しさん
2005/11/08(火) 14:18:12gawk '{ print }' file.txt
の所でエラーになります。
gawk "{ print }" file.txt
これは問題なし。何が悪いのでしょうか。(Windows2000 コマンドプロンプトです)
0716デフォルトの名無しさん
2005/11/08(火) 14:20:17の所でエラーになります。
↓
' の所でエラーになります。
0717デフォルトの名無しさん
2005/11/08(火) 16:50:300718デフォルトの名無しさん
2005/11/08(火) 17:34:020719デフォルトの名無しさん
2005/11/08(火) 18:39:580720715
2005/11/08(火) 22:34:06jgawk を捜し求めて、
http://www.hinadori.atnifty.com/~wills/ から
gawkm115.zip
をダウンしました。
gawk '{ print }' file.txt
問題なく通りました。
というわけで、vector の gawk 3.1.5 for Windows 捨てました。
0721デフォルトの名無しさん
2005/11/10(木) 01:22:59そんなにシングルクォートが好きなのか・・・
0722デフォルトの名無しさん
2005/11/11(金) 13:36:040723デフォルトの名無しさん
2005/11/11(金) 14:15:533.0.6 ね。
http://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html#POSIX_002fGNU
を見ると 3.1 から TCP/IP 通信とか双方向パイプとか
binmode とかまた色々増えたんだなぁ。
0724デフォルトの名無しさん
2005/11/14(月) 00:17:48それって、cmd.exe の問題では?
本来 shell のやるべき仕事を全て gawk.exe で抱え込むのは
どうかと思うけどね。
0725デフォルトの名無しさん
2005/11/14(月) 21:53:250726デフォルトの名無しさん
2005/11/14(月) 22:03:070727デフォルトの名無しさん
2005/11/14(月) 22:34:15GNU utilities for Win32 辺りでググって見れ
0728デフォルトの名無しさん
2005/11/14(月) 22:41:02元記事の人が「'」を使いたいならと思って。
0729デフォルトの名無しさん
2005/11/16(水) 20:57:10cygwin みたいには遅くないし
結構ツール揃ってるし
0730デフォルトの名無しさん
2005/11/22(火) 00:42:15をつくりたいんだけど、
BEGIN
{ RECORD = ""; I = 0;}
{ RECORD += $0; I += 1;
if(I == 3) { print RECORD; RECORD = ""; I = 0; }
}
なんてできないんだよね。
しかたなくださいけど、
BEGIN{ A = ""; B = ""; STATUS = 0;}
{
if(STATUS == 0) { A = $0; STATUS = STATUS + 1;
}
if(STATUS == 1) { B = $0; STATUS = STATUS + 1;
}
else { print A " " B " " $0; STATUS = 0;
}
}
って作った。もっと簡単にできる?
0731デフォルトの名無しさん
2005/11/22(火) 07:03:03if(I == 3) { print RECORD; RECORD = ""; I = 0; }
}
空白が文字列連接演算子
getline使ったほうが読みやすい
BEGIN {
while ((getline A) > 0) {
getline B
getline C
print A, B, C
}
}
0732デフォルトの名無しさん
2005/11/22(火) 10:47:08レコードたって、空白行が区切りとかじゃなく、単に(区切りなしの)3行ごと?
元データの構造がダサすぎて 所詮 awk向きでもないのでエレガントには
書けないのでは。(3行ごとに1行にまとめる、と考えると sedでも可?)
0733デフォルトの名無しさん
2005/11/22(火) 12:27:24NR%3{printf($0)}
!(NR%3){print}
0734デフォルトの名無しさん
2005/11/22(火) 13:39:42printf "%s", $0 とかしないと$0が%s含んでるとき等にエラーになるよ
% echo "%s" | awk '{printf($0)}'
awk: (FILENAME=- FNR=1) fatal: not enough arguments to satisfy format string
`%s'
^ ran out for this one
0735デフォルトの名無しさん
2005/11/22(火) 17:16:34確かに。ご指摘ありがとう。
じゃあこれで↓
NR%3{printf("%s", $0)}
!(NR%3){print}
0736デフォルトの名無しさん
2005/11/22(火) 20:08:47{printf("%s", NR % 3 ? $0 : $0 "\n")}
とか。
でも、文末に\nがあったり無かったりがいやんな感じ。
0737デフォルトの名無しさん
2005/11/23(水) 00:24:47これに一票。
分かりやすくて、短い!
0738デフォルトの名無しさん
2005/11/23(水) 00:27:18変数が増えれば、直感的に理解しにくくなる。
NRが何のためにあるか、理解しよう。
0739デフォルトの名無しさん
2005/11/23(水) 21:28:24awkで3項演算子使えるのか。勉強になった。
0740デフォルトの名無しさん
2005/11/24(木) 09:33:01あれ、3項演算子って言うのか。勉強になった。
0741デフォルトの名無しさん
2005/11/25(金) 03:30:280742デフォルトの名無しさん
2005/11/26(土) 10:31:07さっそく、試してみます。
余談ですが、自分は、20代後半のSEですが、最近の新人は、
AWKを使わないですよね。
いかに自分が楽できるか考えないのかな?
という自分は、sedは置換でしかつかいませんが・・・。
0743デフォルトの名無しさん
2005/11/26(土) 10:46:12みなさんはどう書きます。通常、
/<A>/,/<\/A>/{
print;
}
で<A></A>内のデータは抽出できると思いますが、
入れ子になっていた場合、つまり、
<A><B><C></C></B></A>
こんなときって、
/<A>/,/<\/A>/{/<B>/,/<\/B>/{/<C>/,/<\/C>/{print}}}
はできないですよね。
0744デフォルトの名無しさん
2005/11/26(土) 11:38:48プログラム作ってたら length("abcd\0efgh") = 4 に
なるんだけど、これは正しいの?
また、f("abcd\0efgh") = 9 を求める方法はあるので
しょうか?
環境は...
> gawk.exe --version
GNU Awk 3.1.5
です。
0745デフォルトの名無しさん
2005/11/26(土) 11:46:18% awk 'END{print length("abcd\0efgh")}' </dev/null
9
% awk --version
GNU Awk 3.1.4
(以下略)
0746デフォルトの名無しさん
2005/11/26(土) 14:01:57追試ありがとうございます。
いま、gawk の NEWS 見てたら Changes from 3.1.4 to
3.1.5 の中に…
8. Gawk is now multibyte aware. This means that
index(), length(), substr() and match() all
work in terms of characters, not bytes.
とあったので、どうもこのあたりで仕様が変わってしまっ
たみたいですね。
0747デフォルトの名無しさん
2005/11/26(土) 14:11:37このスレを"XML"で検索しる
0748デフォルトの名無しさん
2005/11/27(日) 04:05:10ソース確認したけどバグだね。
報告しる。
0749デフォルトの名無しさん
2005/12/02(金) 00:37:59XMLgawkですよね。
それを入れることができない環境では、nawkとかしかつかえないんだけど。
0750デフォルトの名無しさん
2005/12/02(金) 11:50:55他のスクリプト言語ならいろいろライブラリあるじゃん。
0751デフォルトの名無しさん
2005/12/02(金) 23:53:43Solaris8のデフォルト環境でやろうと考えています。
perl等は最初からはいっていますが、デフォルトバージョンで
XMLのライブラリが使えるか心配。
0752デフォルトの名無しさん
2005/12/03(土) 17:00:03なおした。
新しいので試してみて。
0753デフォルトの名無しさん
2005/12/04(日) 02:32:54試した。
新しいので試してみた。
ぐっじょぶ!
0754デフォルトの名無しさん
2005/12/04(日) 02:44:22とりあえず、xmlgawk でできますね。
XMLSTARTELEM 使えば node 単位でも depth でも検索できます。
0755デフォルトの名無しさん
2005/12/04(日) 03:39:463 種類でやってみた
BEGIN { XMLMODE = 1; XMLCHARSET = "UTF-8";}
XMLCHARDATA {
depth++;
if ( depth == 3 ) { print $0; }
}
#----------
XMLCHARDATA { data = $0; }
XMLENDELEM == "C" { print data; }
#----------
XMLSTARTELEM == "A" { search = "a"; }
XMLSTARTELEM == "B" { search = search "b"; }
XMLSTARTELEM == "C" { search = search "c"; }
search == "abc" && depth == 3 { print $0; }
0756デフォルトの名無しさん
2005/12/12(月) 00:32:090757デフォルトの名無しさん
2005/12/14(水) 21:19:410758デフォルトの名無しさん
2005/12/15(木) 16:10:06eXtensible Markup Language, GNU Not UNIX, Alfred V. Aho, Peter J. Weinberger Brian W. Kernighan
とします。
0759デフォルトの名無しさん
2005/12/17(土) 10:59:130760デフォルトの名無しさん
2005/12/17(土) 11:37:04オレはつい「オーク」と呼んでしまうんだが。
0761デフォルトの名無しさん
2005/12/17(土) 17:15:49auk と同じ音、「おーく」でいいんでないかい?
本の表紙にわざわざ使ってるくらいだし。
0762デフォルトの名無しさん
2005/12/17(土) 19:16:50オークってこんなのだっけ?
_,ィヽ∧人从人)ヽ,、
_チ;;:.. ..;;:... ヽ ヽ、从人乂人∧人/ヽハ
`ヽ、;;::.. ヽ ..;;:... i i , )ハ `)
,彡;;::.. 一 、 \ヽ ソノノノノ/ ノ _ノ
`フ;;::::.. ..;;:.../;;;::.. ::.. .:)i( ... ヽミ ヽ `ヽ うぉ!うぉ!うぉ!うぉ!
_彡;;::::.. / /;;::..... _,ノ' 'ヽ、_ |ヽ ゝ <
`フ;;:.. ,イ /;;::....::《;・,,;》,:: .《・,;》 ソ _ノ
ノ;;:::.. 川レ';;::.. ..::.. ⌒ )::・_・),、^ヽノ `⌒ヽ、r'VWY`vw'YVwY
~フ;;::..ノノ;;;::.. ..::..┃イトョヨョョイ.}┃l
ノ;;::.. ノ;;;;;::.. ..::..┃l | |.l|┃l
, - ''"´イ ヘ ヽ;;;::.. ..::..┃!.l-t-、 |,!┃ノ`-、 ニシャーーーッ
;;;;;;;;:::::::::::::::::\ヽ、;;::....┗ヽニニソ┛/i| `ヽ,
;;;::::::::::::::::::::::::::::::ヽ、;;;;ー─--一',;' ! ヽ
0763デフォルトの名無しさん
2005/12/17(土) 19:42:310764デフォルトの名無しさん
2005/12/17(土) 19:44:400765デフォルトの名無しさん
2005/12/17(土) 22:50:47テキストの定型データ処理で
「まともにプログラム組むよりawkででっち上げた方が早そうだ」
と思える様なもの辺り。
0766デフォルトの名無しさん
2005/12/18(日) 01:01:31>テキストの定型データ処理で
sedで正規表現を使ってスクリプトを組むと、しんどいなぁという範囲。
0767デフォルトの名無しさん
2005/12/18(日) 02:07:49Perl, Ruby がなくって、実行環境が Solaris なのに開発環境がドサーな範囲。
0768デフォルトの名無しさん
2005/12/18(日) 02:35:26素人へは前衛的な表現で、この際嘘とかどうとか問題外だ
0769デフォルトの名無しさん
2005/12/18(日) 02:47:21ruby分子は革命の敵とか、
perl独占資本を倒せとか言うんかいな。
0770デフォルトの名無しさん
2005/12/31(土) 20:20:02あるファイルの上から60%だけ取り出して出力したいのですが...
現在はwcで数え上げていちいち行数を打ち込んでいる状況です
0771デフォルトの名無しさん
2005/12/31(土) 20:56:17NR
{
d[NR]=$0;
}
END{
e=int(NR*0.6);
for(i=1;i<=e;i++){
print d[i];
}
}
0772デフォルトの名無しさん
2006/01/01(日) 01:16:17大吉 中吉 小吉 吉
EOF
新年早々くだらなくてすまん。
0773デフォルトの名無しさん
2006/01/01(日) 04:26:53ありがとうございます
0776デフォルトの名無しさん
2006/01/03(火) 10:52:17まあ対象のファイルが一つなら
一緒だけど
0777デフォルトの名無しさん
2006/01/03(火) 11:18:23っつーか、ファイル全部メモリに記憶すんなよ(w
BEGIN部で行数数えろ
0778デフォルトの名無しさん
2006/01/03(火) 15:16:06メモリ格納が無理なら、wcで行数数えてそれをスクリプトに渡して、
NR/FNRと比べれば良いだけの話では?
0779デフォルトの名無しさん
2006/01/03(火) 20:42:23FNR か、使ったことがなかったよ。
0780デフォルトの名無しさん
2006/01/03(火) 21:18:59BEGIN部で行数カウントするなら、BEGIN部だけで終わらせてしまうそうだ。
BEGIN部を使わなくて、配列に読み込まないという条件なら、
{
#
}
END{
e=int(FNR*.6);
for(i=1;i<=e;i++){
getline < ARGV[1];
print $0;
}
}
配列に読み込めるサイズのファイルであれば、
{
d[FNR]=$0;
}
END{
e=int(FNR*0.6);
for(i=1;i<=e;i++){
print d[i];
}
}
が分かりやすいと思うが。
0781770
2006/01/03(火) 23:49:31一応wcでカウントしてやったものと>>771で教えてもらったものをdiffしても違いはなかったのですが。
0782デフォルトの名無しさん
2006/01/04(水) 00:58:20たくさん、というか実装に依ったと思う。
最近の物なら(仮想)メモリが十分にあればよほどでかいファイルを読ませない限り
問題ないと思う。
# ↓256本に載ってた物を手直ししたテストプログラム
BEGIN {
for (i=0; i<1024; ++i) { kilo = kilo " " }
i = 0
while (1) {
print ++i
s[i] = "" kilo
}
}
0783デフォルトの名無しさん
2006/01/04(水) 22:30:57BEGIN {
while(getline<ARGV[1]>0) {nr++;}
close(ARGV[1]); #忘れないように
while(getline<ARGV[1]>0) {
i++;
if (i>=nr*0.6){exit;}
}
}
0784770
2006/01/05(木) 13:24:24今は値を二乗してルートとってるのですが
0785デフォルトの名無しさん
2006/01/05(木) 19:33:31function abs(x) {return (x < 0) ? -x : x}
0786デフォルトの名無しさん
2006/01/06(金) 21:00:25返事が遅れましたがありがとうございました
0787tk&ybh
2006/01/12(木) 11:22:57日付と予定事項と実行計画事項を入力データとする週間予定表の生成プログラムを作成せよ.但し,
・プログラムはawkスクリプトとし,ファイル名をmyplan.awkとする.
・入力データファイルはmyplan.dataとし,これにはデータだけを含み,各フィールドはコロンで分離する.
・予定表を生成するためのフォームを用意する,これをmyplan.formとする(英語表現,ローマ字表現)
(ただし,先頭の行に学生番号,氏名の欄,末尾にmemo欄(実行計画記入)を入れる.すべて英数文字)
・生成した予定表は標準出力で確認すると同時にmyplan.txtにも出力する
・アクセス権の変更:chmod 644 myplan.txt
・確定した週間予定表myplan.txtを.planにコピーする(かな漢字のかわりに英語表現,ローマ字表現使用)
0788デフォルトの名無しさん
2006/01/12(木) 12:16:360789tk&ybh
2006/01/12(木) 12:47:570790デフォルトの名無しさん
2006/01/12(木) 19:28:550791デフォルトの名無しさん
2006/01/12(木) 20:38:14まずは myplan.data, myplan.form, myplan.txt の例を作ってみな
0792デフォルトの名無しさん
2006/01/15(日) 19:22:380793デフォルトの名無しさん
2006/01/15(日) 19:53:390794デフォルトの名無しさん
2006/01/15(日) 20:09:34では駄目なんすか?
0795デフォルトの名無しさん
2006/01/15(日) 20:10:560796デフォルトの名無しさん
2006/01/15(日) 20:13:25それぞれのファイルの最後の欄をまとめるという処理をしたいと思っています
>>793さんのレスを解釈して作ってみましたがなにか違うようです
#!/bin/bash
awk '{
for(i=1;i<=40;i++)
x=sprintf("test%02d",i) ここでtest01〜test40が生成?
{field=$NF} 最後の行の最後の欄を出力する
END {print field} x
}'
というソースです
0797デフォルトの名無しさん
2006/01/15(日) 20:17:540798デフォルトの名無しさん
2006/01/15(日) 21:31:55何がしたいのかイマイチ見えないが、
{
print $NF, FILENAME;
}
ではダメなん?
順番は bash で順番に読み込まれるのでは?
ダメなら後から sort でもいいのでは?
0799デフォルトの名無しさん
2006/01/15(日) 22:37:17#!/bin/sh
for i in `seq -w 1 40`; do tail -n 1 test$i | awk '{ print $NF; }'; done > /dev/null
0800デフォルトの名無しさん
2006/01/16(月) 01:45:20後、getlineな
0801デフォルトの名無しさん
2006/02/05(日) 04:53:340802デフォルトの名無しさん
2006/02/05(日) 08:08:500803デフォルトの名無しさん
2006/02/05(日) 10:39:51主にホワイトスペースなどでフィールドに分かれているテキストデータに
対して何らかの処理を加えるフィルタを書くのに向いている。
最も基本的な構文は以下の通り。
BEGIN {
スクリプトの開始時に実行される
}
/パターン/ {
処理
}
/パターン/ {
処理
}
END {
スクリプトの終了時に実行される
}
ここには通常の言語で書かれる open や while などの構文が出てこないが、
この状態で
$ awk -f スクリプトファイル名 データファイル名
と実行すれば自動的にデータファイルを開き、順番に読み込み、
各行に対して /パターン/ にマッチしたら処理を加える、という動作を行う。
BEGIN, END は特殊で、これはスクリプトの開始時と終了時にしか実行されない。
0804デフォルトの名無しさん
2006/02/05(日) 10:57:091. 処理対象となる行データから改行コードは落ちてる。chop とか必要ない。
2. FS という変数の設定によって各行は自動的にフィールドに分割される。デフォルトではフィールドセパレータはホワイトスペース。
3. 分割されたフィールドは $1, $2, $3 ,... に入る。元の行は $0 に入る。スクリプトの中で明示的に $0 に何かを代入しても自動的に分割される。逆に $1, $2, ... に代入すると $0 は再構成される。
4. Cっぽい構文が一通り使える。関数も作れる。スコープはデフォルトでローカル、ただしグローバル変数の参照は可能。JavaScript っぽいと言えば通じるか?
5. 型はルーズ。
6. 文字列は連結ではなく連接という形でくっつけることができる。str = "abc" "def" で str は "abcdef" になる。
7. パターンのないブロックを書けるので、複雑な処理や条件を書きたい場合は
{
この中で好きなように処理を書け
}
という形のスクリプトを書く。
補足、間違い指摘ヨロ。
気をつけなきゃいけないのは、awk には意外と多くの処理系があるってこと。
GNU/Linux しか使ってないと gawk しか触らないから分からないけど、BSD系
とか他の商用UNIXなんかだと gawk はデフォルトで入ってないことが多い。
自分の使ってる awk が何なのか、把握しておくこと。
0805デフォルトの名無しさん
2006/02/05(日) 11:06:04統一しちゃったけど、本当は「レコード=行」じゃないです。
まぁそこら辺は自分で追求したいやつが調べてくれってことで。
0806緩和時点
2006/02/05(日) 11:59:392種類のログデータが1つになっているファイルがあります。
2種類のログデータは前半(AAAA情報)、後半(BBBB情報)と
わかれてます。
ログデータは、
AAAA情報
XXXXX
AAAA情報
XXXXX
〜
BBBB情報
XXXXX
BBBB情報
XXXXX
AAAA情報とBBBB情報の2つのファイルに分割したいのですが
どのようにすればよいでしょうか。
BBBB情報の文字列が現れたら、それ以降の行を別のファイルとすれば
よいかと考えたのですがどのようにすればよいのかわかりません。
どなたかご教授の程お願い致します。
0807デフォルトの名無しさん
2006/02/05(日) 14:37:12出現をフラグにする
フラグが立ってなかったらファイルAへ出力
フラグが立ってたらファイルBへ出力
0808デフォルトの名無しさん
2006/02/05(日) 16:16:52gawkではローカルなの?
function f(a,b,c) { d = 0 }
ここでのa,b,cはローカルだけど、dはグローバルだと思ったんだけど。
0809デフォルトの名無しさん
2006/02/06(月) 00:40:52必ず奇数行目が「○○○○情報」、偶数行目がコンテンツなら、
NR % 2 == 1 && $0 ~ /AAAA/ {flag_a = 1;flag_b = 0}
NR % 2 == 1 && $0 ~ /BBBB/ {flag_a = 0;flag_b = 1;}
NR % 2 == 0 && flag_a == 1 {print $0 >> file_a}
NR % 2 == 0 && flag_b == 2 {print $0 >> file_b}
0810デフォルトの名無しさん
2006/02/06(月) 00:44:00function f(a,b,c) で引数に書かれていないパラメータは基本的にグローバルでい
いんでは ?
故意に内部だけで使うのであれば、タブで区切って f(a,b,c,d) と書けば内部だけ
のローカル。(タブである必要はないけどお約束みたいなもの)
ということでなかったっけ?
0811デフォルトの名無しさん
2006/02/06(月) 00:44:52c,d の間に TAB ね。
0812802
2006/02/06(月) 04:37:25あり^^
vimとか多機能エディタのスクリプトで代用できそうな感じがするんですが、
浅はか?
0813デフォルトの名無しさん
2006/02/06(月) 06:26:370814デフォルトの名無しさん
2006/02/06(月) 07:59:59別にいいんじゃないの
vim が入っている環境なら
0815デフォルトの名無しさん
2006/02/06(月) 09:18:190816804
2006/02/06(月) 09:37:58みなさんご指摘の通りですた。ちょっと他のとごっちゃになってますた。
ローカル変数にしたい場合
function abc( foo, bar, [間あけて] baz, foobar ) {
}
みたいに書くのが常套手段でした。
0817デフォルトの名無しさん
2006/02/07(火) 01:17:45深くはないけど、浅くもない。
限られた命令の中で遊ぶのも悪くないし。
良いボケ防止だよ。
0818デフォルトの名無しさん
2006/02/07(火) 05:48:07個人的にはそれだけでも無視できない存在に見えてきます。
0819デフォルトの名無しさん
2006/02/07(火) 07:58:22Perl とか使いこなしてるなら改めてやる必要はないような気もするけど
0820デフォルトの名無しさん
2006/02/07(火) 09:12:180821デフォルトの名無しさん
2006/02/07(火) 19:52:200822デフォルトの名無しさん
2006/02/08(水) 01:04:41とりあえず、オライリーからは 3 冊かな。
「sed & awk デスクトップリファレンス」
「sed & awkプログラミング」
「Effective Awk Programming」
最後は英語のみ。
個人的には、「プログラミング言語 AWK」がベストかな。
オライリーじゃないけど。
0823デフォルトの名無しさん
2006/02/08(水) 01:07:39確か awk のオリジナルソースは全部で 700 行じゃなかったっけ?
とどこかで見た記憶がある。
今や gawk は gzip しても 2 MB のコード。
0824デフォルトの名無しさん
2006/02/08(水) 02:16:340825デフォルトの名無しさん
2006/02/08(水) 10:03:04yacc, lex (または bison, flex) を使うのならそんなに苦労しないと思う。
ただ最新版の gawk などと同一のものを作ろうとすると非常に面倒だと思う。
学習のために作ってみたいという場合は必要最小限の機能をまず作り、
それをちょっとづつ拡張していけばいいんじゃないだろうか。
0826デフォルトの名無しさん
2006/02/08(水) 11:31:08awkの最初のバージョンではユーザー関数すら定義できなかったから。
それでLispインタプリタ(walk)を実装した剛の者がいたそうだが。
0827デフォルトの名無しさん
2006/02/08(水) 21:24:070828デフォルトの名無しさん
2006/02/08(水) 21:49:27awk mania!
ttp://chasen.org/~daiti-m/etc/awk/
0829デフォルトの名無しさん
2006/02/08(水) 22:06:39ttp://cm.bell-labs.com/who/bwk/
0830デフォルトの名無しさん
2006/02/08(水) 23:39:50http://angband.tip9ug.jp/magic/srcgw/n/sources/plan9/sys/src/cmd/awk
0831デフォルトの名無しさん
2006/02/09(木) 00:53:18ttp://pantorabox.sourceforge.jp/
に入っている bin-util とか awk もソースが小さかった記憶がある。
0832デフォルトの名無しさん
2006/02/10(金) 23:58:38Perlは知らなかったし。
0833デフォルトの名無しさん
2006/02/12(日) 15:05:571000行程度の数値が入ってる2つのファイルがあるんですが(1列目だけ)
各行ごとの数値の差を出したいのです
{
FILENAME == argv[1]{if ($1 > maxa)
max = $1
a[$1] = $0}
FILENAME == argv[2]{if ($1 > maxb)
max = $1
b[$1] = $0}
END{
for (x = 1; x <= max; x++)
print a[x]-b[x]
}
これでうまくいかないのですがどこが間違っているのでしょう?
0834デフォルトの名無しさん
2006/02/12(日) 15:54:53ファイルが/tmp/a /tmp/bだとしてこんな感じじゃダメかい?(bの方が行数多い場合には無視)
awk '{a=$1;if(getline < "/tmp/b"){print a-b}else{print "a only!"};}' /tmp/a
0835デフォルトの名無しさん
2006/02/12(日) 15:57:26即興なんでかんべん
0836デフォルトの名無しさん
2006/02/12(日) 16:28:52file1: 7, 2, 3, ...
file2: 3, 2, 6, ...
を処理したら 4, 0, -3 になる処理のように読めるんだけど
0837デフォルトの名無しさん
2006/02/12(日) 16:40:31>>833 に、
> 1000行程度の
> 1列目だけ
って書いてあるから、
file1:
7
2
3
...
file2:
3
2
6
...
だと思うが。
0838デフォルトの名無しさん
2006/02/12(日) 16:53:50俺が言いたいのは、行ごとの差を取るという主題を
俺が勘違いしてるかもってことなんだ
具体的に言うと a[$1] = $0 っていう代入文からみて
何か別の処理がしたいんじゃないかと
0839833
2006/02/12(日) 16:59:58それで,うまくいきました.
このプログラムは非常にシンプルなんで覚えておくことにします
ありがとうございます
>>836
わかりにくくてすいませんでした
>>837さんの言うとおりの形です
みなさんありがとうございました
0840デフォルトの名無しさん
2006/02/12(日) 17:50:08漏れにはそれ以上短く記述できないw
何はともあれawkの面目躍如といったとこだな
0841デフォルトの名無しさん
2006/02/13(月) 20:15:490842デフォルトの名無しさん
2006/02/13(月) 21:56:320843デフォルトの名無しさん
2006/02/14(火) 00:41:47おぃおぃ、どこが間違っているかと聞いているんだから、ちゃんと答えようぜ。
・argv でなくて ARGV (再指定しているなら OK だが)
・括弧が対応していない
・その max って何よ (これは置いておく)
メモリが無尽蔵なら、以下のようにするが個人的にはスマートだと思う。
{
num[FNR,FILENAME] = $0;
}
END{
for (x = 1; x <= FNR; x++) {
print num[x,ARGV[1]] - num[x,ARGV[2]];
}
}
0844デフォルトの名無しさん
2006/02/14(火) 01:31:00ただの突っ込みレスはいらなくね?
0845デフォルトの名無しさん
2006/02/14(火) 01:42:240846デフォルトの名無しさん
2006/02/14(火) 01:47:53風のない天気のよい日には
枝葉末節にこそ拘るのも
趣があって実によいものだ。
0847デフォルトの名無しさん
2006/02/15(水) 00:24:300848デフォルトの名無しさん
2006/02/18(土) 10:28:57paste コマンドが使えるなら、
$paste file1 file2 |awk '{print $1-$2}'
が、頭使わなくてラクじゃね?
0849デフォルトの名無しさん
2006/02/22(水) 22:05:33では、いかがですか?
いったん、配列に格納するのでメモリ食いますけど。
0850デフォルトの名無しさん
2006/02/24(金) 01:24:52頭でカバー。
0851デフォルトの名無しさん
2006/02/24(金) 17:39:04頭でカバーというより、awkはUNIXのtext utilityの一部として
設計されたコマンドだから、>>848が正解だと思う。
0852デフォルトの名無しさん
2006/02/26(日) 13:04:100853デフォルトの名無しさん
2006/02/26(日) 16:49:15隣家に行くのにアルゼンチンを経由するのも、まあ正解の一つだ。
0854デフォルトの名無しさん
2006/02/27(月) 03:53:07現実的かどうかってのは無関係かよ
0855デフォルトの名無しさん
2006/03/12(日) 19:20:500856デフォルトの名無しさん
2006/03/12(日) 23:01:04いいんでないのかな。
確かに 848 が良いというのは分かる。ただし、全て正解であるのも間違いは
ない。
質問を出した人が自分で納得できる解を求めてくれれば良いんでない。
そういう遊べる言語でもあるのが awk の良いところでもあると思っている。
0857デフォルトの名無しさん
2006/03/13(月) 02:55:06並立要素を欠いた朧化の「も」を使いすぎ。
意見を述べるときは、断定しよう。
0858デフォルトの名無しさん
2006/03/13(月) 08:00:23ま、>>856の妄言はどうでもいいんだが。
並立要素は省略されているだけで、朧化でなかんべ。
補完できないチミの問題。
0859デフォルトの名無しさん
2006/03/14(火) 17:20:34excelでunicodeテキストで出力したファイルを処理したいんだけど...
0860デフォルトの名無しさん
2006/03/14(火) 18:45:09windows にも nkf あるぞ?
0861デフォルトの名無しさん
2006/03/14(火) 19:41:34http://human5.2ch.net/test/read.cgi/ms/1141694640/
8 名前:可愛い奥様[] 投稿日:2006/03/07(火) 11:05:23 ID:8dtluKkp
夫の歯ブラシで洗面所の排水溝掃除。
洗面所をビショビショに汚した罰だ。
20 名前:可愛い奥様[age] 投稿日:2006/03/08(水) 00:40:17 ID:pRrk6A21
前に頭きた時あって
1度だけ歯ブラシで肛門カキカキしちゃった
22 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:27:12 ID:gU5mHc7J
よかった。どこのお宅も同じようなことしてて。
24 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:36:35 ID:SSSFsTqE
そうそう、ヘンなモノはダンナのお皿へ直行だよね。
41 名前:可愛い奥様[] 投稿日:2006/03/08(水) 11:55:18 ID:sjj+/60Q
見てるだけで気が晴れるな!
皆さん、頑張ってね!
42 名前:可愛い奥様[sage] 投稿日:2006/03/08(水) 20:33:51 ID:Ju2N1s7+
年金分割が楽しみじゃのう
63 名前:可愛い奥様[] 投稿日:2006/03/10(金) 08:55:20 ID:qLfJYpJR
家族で密かにはぶっている。
男性は肉体が汚く、精神が美しい傾向がある。(気に入らない相手に肉体的攻撃を加える⇒精神的攻撃も加える男は猛者)
女は肉体が美しく、精神が汚い傾向がある。(気に入らない相手に精神的攻撃を加える⇒肉体的攻撃も加える女は猛者)
女は隠れて悪事をする。気に入らない女子を便所でボコったり、便器舐めさせたり、男の友人を使ってレイプ、仲間外れにしたり。陰口、嫉妬。
女は対人関係において、この汚い性格を隠そうとするため、外面が非常によくなる。(猫かぶり)
男性諸君は外面に騙されないように気を付けて下さい。
0862デフォルトの名無しさん
2006/03/14(火) 23:17:12ヨーロッパ文字を扱う必要があり、shift jisだとだめだから
unicodeにしようかと...そんで、awkで処理してunicodeのXMLか
HTMLを吐く予定です。nkfは調べてみます。
0863デフォルトの名無しさん
2006/03/15(水) 12:32:56nkf を出したのは utf-16 にも対応してて文字コードの
変換ができるよってだけなので、変換で失われるものが
あるなら使えないです。
ただ utf-8 でいいなら最近の LL ならなんでもイケると思うよ。
nkf で utf-16 -> utf-8 変換してから作業するのが現実的
かなぁ。
utf に awk で対応できたかどうかは分かんない。3.1.x は
国際化のフレームが変わったので対応できるのかも。やって
みたことないけど。自分がやるなら Perl とか Ruby とか
使っちゃうと思う。
0864デフォルトの名無しさん
2006/03/15(水) 17:53:30utf8対応のwindows上のawkはあるみたいです。
ttp://www.kt.rim.or.jp/~kbk/
なのでnkfでutf-16 -> utf-8で変換してからやってみます。
# LLってなんでしょうか?Light Language?
0865デフォルトの名無しさん
2006/03/15(水) 18:53:56Lightweight Language
いわゆるスクリプト言語全般を最近はこう呼ぶらしい
0866デフォルトの名無しさん
2006/03/15(水) 19:14:11スクリプトは重たいけどheavy weightじゃないんだ
0867デフォルトの名無しさん
2006/03/16(木) 02:37:19Perl 6 でも LL だもんなぁ。(w
0868デフォルトの名無しさん
2006/03/16(木) 15:45:250869デフォルトの名無しさん
2006/03/17(金) 02:31:22メモリがキロバイトの時は、大きめのファイルを配列に読み込ませるときにうまくいかなかったことがあったが、
今では、たいていのファイルをオンメモリで処理できる。いい時代や。
0870デフォルトの名無しさん
2006/03/17(金) 09:10:44DOS の話?
32bit だったら djgpp でコンパイルしたやつで壁は
突破できたけどね。まー確かに今の方がずっと楽だ。
0871デフォルトの名無しさん
2006/03/17(金) 18:54:36いや、UNIXに仮想記憶が実装される前の頃の話だろ。
0872デフォルトの名無しさん
2006/03/17(金) 20:22:16そんな古の時代なんか知らねっす
0873デフォルトの名無しさん
2006/03/18(土) 00:09:33"KB" は「キロバイト」じゃなくて「キビバイト」だよ。
0874デフォルトの名無しさん
2006/03/18(土) 16:42:310875デフォルトの名無しさん
2006/03/18(土) 17:21:080876http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 20:22:39もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0877デフォルトの名無しさん
2006/03/25(土) 10:57:34キダ・タロー先生?
0878デフォルトの名無しさん
2006/03/28(火) 16:35:560879デフォルトの名無しさん
2006/03/28(火) 17:36:020880デフォルトの名無しさん
2006/03/28(火) 22:46:290881デフォルトの名無しさん
2006/03/31(金) 14:41:36みたいで、それを使って別途インストールしないといけない、でもdownload.batを実行すると
エラーになる、どうやったらインストールできるんだろか
GnuWin32とCygwinの違いってbashターミナルで実行するかコマンドプロンプトで実行するかの違い?
0882デフォルトの名無しさん
2006/03/31(金) 15:53:19Cygwin使っている人いますか? 4
http://pc8.2ch.net/test/read.cgi/win/1121456258/
0883881
2006/03/32(土) 01:31:49cygwin + mingwn + gcc 相談室 Part2
http://pc8.2ch.net/test/read.cgi/tech/1126103347/
0884デフォルトの名無しさん
2006/04/23(日) 15:57:240885デフォルトの名無しさん
2006/05/13(土) 03:28:150886デフォルトの名無しさん
2006/05/14(日) 23:50:20aa,bb,,cc,dd
の時、3番目はNULLですが、awkでどうやったら処理できるか分かりません。
どうやっても$3にccが入ってしまいます。
どうやったらNULLになりますか?
0887デフォルトの名無しさん
2006/05/15(月) 00:07:42どういう環境で?
FreeBSDでも、gawk 3.1.5でも、BusyBoxでも$3は空列になるが
0888886
2006/05/15(月) 08:41:27正確にはFSが¥tなんですが見にくいのでカンマに変えて書いてます。
win2000 gawk でやって
FS = "\t" でも FS = "\t$" でも駄目なんです。
0889デフォルトの名無しさん
2006/05/15(月) 09:29:270890886
2006/05/15(月) 09:43:26許してくれ。
0891デフォルトの名無しさん
2006/05/16(火) 01:13:31ちゃんとNULL
0892886
2006/05/16(火) 20:33:15win側のバグ?
でも cygwinでは動くという人もいるみたいだし。
0893デフォルトの名無しさん
2006/05/16(火) 20:40:210894デフォルトの名無しさん
2006/05/16(火) 21:52:18下のスクリプトで試しただけだが
BEGIN{FS="\t"}
$3 == "" {print "null"}
0895デフォルトの名無しさん
2006/05/18(木) 00:34:26テキストファイル(aaa.txt)に
ls,pwd,…
といった感じでコマンドを書いておいて
それを読み込んでじゅんぐりに実行するっては
どうやって書けばよろしいですか??
初心者ですんません…
0896デフォルトの名無しさん
2006/05/18(木) 00:45:07BEGIN {FS=","}
{ for(i=1; i<=NF; i++) system($i) }
0897デフォルトの名無しさん
2006/05/18(木) 08:32:18for i in `cat aaa.txt`
do
eval $i
done
てゆーか、1レコード1コマンド(1フィールド1コマンドでなく)のaaa.txtにして、shに食わせるのが一番正しい気がする。
0898デフォルトの名無しさん
2006/05/19(金) 02:50:00>>897
ありがとうございます!!
非常に参考になりました!!!!
あともう一つですが
変数を$の後の数値として使うことってできるのでしょうか?
たとえば、
for(i=1; i<=5; i++) このようなループをして
引数を順番に出力するとして
echo $($i)
みたいな使い方です。
説明が悪くて申し訳ございません。
そもそもこんなやり方しなければいいとは思ってるのですが…
すいませんです。
0899デフォルトの名無しさん
2006/05/19(金) 15:41:14iが2なら2番目のフィールドの値だし
$$iとかだとiが2の場合に2番目のフィールドの数値の示すフィールドの値になると思われ
0900デフォルトの名無しさん
2006/05/22(月) 14:20:27awkで?
0901デフォルトの名無しさん
2006/05/29(月) 14:33:360902デフォルトの名無しさん
2006/06/17(土) 06:09:34こんなことをawkでやる意味があるのか?というような。例えば、
$ awk -f date.awk
Sat Jun 17 06:06:03 JST 2006
とか。
0903デフォルトの名無しさん
2006/06/17(土) 11:36:25# cat.awk
{ print }
0904デフォルトの名無しさん
2006/06/18(日) 02:09:08BEGIN {
print strftime( "%a %b %d %T %Z %Y" );
}
ということ?
0905デフォルトの名無しさん
2006/06/18(日) 10:07:52たまたまdateの出力があったので、例としてコピペしただけ。ls.awkでもdu.awkでも、こんなことフツーはawkでやらんだろというものなら何でも良かったんだ。
主旨としては、>>903みたいのを見てニヤニヤしたいだけ。
0906デフォルトの名無しさん
2006/06/18(日) 16:27:43ファイル末尾に改行が無いことが良くあり、
printは必ず行末に改行を付加するという仕様を利用して、
本当に>>903みたいなのを使いましたけどw
0907大岡越前
2006/07/22(土) 19:55:360908デフォルトの名無しさん
2006/07/22(土) 21:45:18いまさら、そんなことを発言する意味があるのかい?
0909デフォルトの名無しさん
2006/07/23(日) 14:33:160910デフォルトの名無しさん
2006/07/28(金) 13:56:55今さらおれもそういう使い方がしたいと思った。
結論から言うと split して配列作れば確実
0911デフォルトの名無しさん
2006/08/17(木) 20:37:57aaa.bbb.ccc.dddの部分を取得したいのですが
どのようにしたら取得できるでしょうか?
文字列がaaa.txtのときは
awk -F. '{ print $(NF-1) }'
でOKだったのですが、上記の文字列の場合はダメだということが分かりました。
ご教授お願いします。
0912デフォルトの名無しさん
2006/08/17(木) 22:13:580913デフォルトの名無しさん
2006/08/17(木) 23:26:02とか。
0914デフォルトの名無しさん
2006/08/18(金) 03:06:300915デフォルトの名無しさん
2006/08/18(金) 03:27:32複数のプロセスから同時に実行すると、
"echo %TIME%" | getline envtim; close("echo %TIME%")
時々
fatal error: internal error This application has requested
the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
が出て落ちてしまプロセスが出るのですが、どなたか考えられる原因が判りませんか?
最終的にはメッセージ通り contact the application's support しか
ないかも知れませんが・・・。
0916デフォルトの名無しさん
2006/08/18(金) 03:32:55しなけりゃいいじゃん
0917デフォルトの名無しさん
2006/08/18(金) 05:27:04上位(呼び出し側)が言うこと聞かないもんで。
0918デフォルトの名無しさん
2006/10/23(月) 13:31:43変数をsedでフィルタリングして再代入したいんだけど
一番簡単なやりかたはどんなんかな?
0919デフォルトの名無しさん
2006/10/23(月) 17:34:53{
"echo '" str "' | sed '" cmd "'" | getline ret
return ret
}
結局こうした
0920デフォルトの名無しさん
2006/10/24(火) 22:57:130921デフォルトの名無しさん
2006/10/24(火) 23:12:210922デフォルトの名無しさん
2006/10/27(金) 23:48:17info には載ってないみたいだ。
0923デフォルトの名無しさん
2006/10/28(土) 03:02:26LIMITATIONS ってファイルがあるからそれ覗いてみ。
ちなみに
# of fields in a record: MAX_LONG
となっている。
0924デフォルトの名無しさん
2006/10/28(土) 11:51:42ttp://www.math.ias.edu/doc/gawk-3.1.3/LIMITATIONS
現実的には無制限か。ありがとう。
0925デフォルトの名無しさん
2006/11/10(金) 16:43:16ProFTPDとかに変えれば素でいろいろ出来るよ
0926デフォルトの名無しさん
2006/11/10(金) 16:44:050927デフォルトの名無しさん
2006/11/13(月) 23:58:590928デフォルトの名無しさん
2006/11/14(火) 01:01:59いいんだよ。
0929デフォルトの名無しさん
2006/11/14(火) 01:16:25教えてgooよりいいと思った。
0930デフォルトの名無しさん
2006/11/14(火) 01:19:100931デフォルトの名無しさん
2006/11/14(火) 21:55:290932デフォルトの名無しさん
2006/11/14(火) 21:58:420933デフォルトの名無しさん
2006/11/15(水) 01:37:04おーく
0934デフォルトの名無しさん
2006/11/15(水) 09:46:150935デフォルトの名無しさん
2006/11/15(水) 23:14:08いいんだよ。
0936デフォルトの名無しさん
2006/11/22(水) 11:47:47教えてgooよりいいと思った。
0937デフォルトの名無しさん
2006/11/22(水) 13:04:290938デフォルトの名無しさん
2006/11/22(水) 15:43:29http://pc8.2ch.net/test/read.cgi/tech/1112553783/
0939デフォルトの名無しさん
2007/01/15(月) 23:16:325年ぶりにAWkを使うことがありました。
古いスクリプトを走らせると
正規表現の[一-九] がうまく作動しません。
つまりカッコ内のひとつにマッチするのが
[ でエラーになります。
5年前はうごいていたのですが。
当時はdosだったから?
今みたいにサーバーにスクリプトを置いていないから?
誰か、気をつけるべきところは?
0940デフォルトの名無しさん
2007/01/15(月) 23:38:54あんたの使っているawkが何者か調べる。
0941デフォルトの名無しさん
2007/01/17(水) 11:05:300942デフォルトの名無しさん
2007/01/18(木) 02:13:05今どんな環境で使ってるかくらい書いてね >>939
0943デフォルトの名無しさん
2007/01/18(木) 23:42:50報告が遅れてすみません。
ベクターから落とした gawk 3.1.5 for Windows
です。
0944デフォルトの名無しさん
2007/01/18(木) 23:43:42osはwin2000です。
0945デフォルトの名無しさん
2007/01/19(金) 02:33:13おまい、ドキュメントに目を通してるか?
内部的な話になりますが、マルチバイト文字はワイドキャラクタに変換して
から処理されています。このため、正規表現で[亜-熙]のように漢字の範囲指
定を行っても期待通りの動作はしません。
とあるぞ。
0946デフォルトの名無しさん
2007/01/19(金) 22:30:02939です。
ということは、JGAWKをdosプロンプトで動かすというのが
簡明な方法でしょうか?
0947デフォルトの名無しさん
2007/01/20(土) 03:44:0332bit版Windows用のjgawkってのはないので、cmd.exeのコンソールから起動しても
自動的にcommand.comが立ち上がるってのを我慢できるのなら、
それでいいんじゃないか?
ところで[一-九]って正規表現なんだが、これって漢数字の一から九を引っ掛けたいの?
一 88EA
二 93F1
三 8E4F
四 8E6C
五 8CDC
六 985A
七 8EB5
八 94AA
九 8BE3
なんで、範囲指定に納まってないやつがあるんだが。
0948デフォルトの名無しさん
2007/01/20(土) 07:27:570949デフォルトの名無しさん
2007/01/20(土) 16:31:530950デフォルトの名無しさん
2007/01/20(土) 20:46:47949さん 参考になります。
しかし、winで動かすというのもしんどいですね。
0951デフォルトの名無しさん
2007/01/20(土) 22:09:48っていうか数年前のレスでみたデジャヴ?
0952デフォルトの名無しさん
2007/01/24(水) 15:43:280953デフォルトの名無しさん
2007/01/26(金) 02:15:130954デフォルトの名無しさん
2007/01/27(土) 02:36:41多分両手の指で数えても指のほうが余るくらいだろう。
gawk, mawk, one true awk, QTawk, Open Solarisのawk
あとまだあったかな?
0955デフォルトの名無しさん
2007/01/27(土) 12:51:200956デフォルトの名無しさん
2007/01/27(土) 18:53:510957デフォルトの名無しさん
2007/01/27(土) 18:55:59あほか。
わからんこと
かきやがって。
0958デフォルトの名無しさん
2007/01/27(土) 22:13:46本人作のawkの最終更新がApril 24, 2005ってのが驚きだ
0959デフォルトの名無しさん
2007/01/27(土) 22:14:12縦読みか。
0960デフォルトの名無しさん
2007/01/27(土) 22:45:14Aはエじゃないのか?
0961デフォルトの名無しさん
2007/01/27(土) 23:07:14というかそこまで考えずローマ字で考えてたんだが。
0962957
2007/01/28(日) 00:02:230963デフォルトの名無しさん
2007/02/18(日) 17:07:04正規表現に引数を使うときの書き方が分かりません
hoge.awkに100を渡して
gawk -v sh=100 hoge.awk abc.txt > def.txt
第1フィールドの初めが"abc100"だったら
っていうのがしたいのですが
if ($1 ~ ^/abc'{sh}'/)
これが動きませぬ
どなたかご教授ください
0964デフォルトの名無しさん
2007/02/18(日) 19:23:59$ cat moe
abc100nyoronyoro
hoge
moemoe
$ cat hoge.awk
BEGIN { hoge = sprintf("%s%s","m",ARGV[1]); ARGV[1]="" }
$0 ~ hoge { print }
$ awk -f hoge.awk 100 moe
abc100nyoronyoro
0965964
2007/02/18(日) 19:25:20訂正
BEGIN { hoge = sprintf("%s%s","abc",ARGV[1]); ARGV[1]="" }
0966デフォルトの名無しさん
2007/02/18(日) 19:31:43パラメータは同じで:
$1 ~ "^abc"sh{
print $0
}
* シングルクォートは、awk では引用符として使えない
* 文字列連結は定数・変数を順にならべるだけ
0967デフォルトの名無しさん
2007/02/18(日) 19:35:42"var=ファイル名"みたいな形もとれるが、
プログラム中でvarがファイルとして読み込まれる場合にのみ正常に動作する。
ファイルとして取り扱われたくなければBEGIN中でARGVを利用し、
ファイル名として扱われるのを防ぐために ARGV[1] = "" などとしておく。
俺はしばらくAwkいじってなかったから腕がナマクラになってるな・・・
BEGINのところは
BEGIN { x = "^abc" ARGV[1]; ARGV[1]="" }
と、シンプルに書くべき。
俺は何で無理にsprintf()なんて使ったんだろう・・・
0968デフォルトの名無しさん
2007/02/18(日) 19:45:03今のAWKは引数がファイル名扱いにならんのか・・・
俺もロートルだな。
0969デフォルトの名無しさん
2007/02/18(日) 22:17:34Perlより機能は少ないけどテキスト処理に関しては必要充分でしょ。
もう少し見直されてもいいような気がするんだけど。
最近はスクリプト言語でもオブジェクト指向が常識になってるけど、
ごく小規模のスクリプト組むのに、クラスがどうとか継承がどうとか考えるのは時間の無駄だし。
本当に本当のエンドユーザー向け言語としてはawkみたいなシンプルな言語は最適だと思うんだけど。
0970デフォルトの名無しさん
2007/02/18(日) 22:36:570971デフォルトの名無しさん
2007/02/18(日) 23:24:45・使える人は1行野郎なりその手のものをその場で作ってその場で捨てるから資料が充実しない。
・使えない人は既にあるものを探そうとするからawkを覚えるよりはPerl(など)のスクリプトを探す方を善しとする。
Excelみたいなスプレッドシートは行数制限があるから、ちょっとしたデータ解析にはawkは重宝するんだけどね。
0972デフォルトの名無しさん
2007/02/19(月) 01:51:57awkをPerlに変換しただけで断然速くなる。
90年代前半にいたawk使いがあっと言う間にPerlに乗り換えていった。
「プログラミング作法」の比較ベンチでも完敗してたし、
Rob Pikeもshは過去の栄光だと言ってる。
0973デフォルトの名無しさん
2007/02/19(月) 02:10:41優秀なことが求められている項目については、
全て勝っていると思うけど。
自分はawkの方が好きなんだけどね。
0974デフォルトの名無しさん
2007/02/19(月) 02:15:12POSIX-awkだと枝狩りがないから正規表現のコストが高い場合があるし、
逆に遅延評価DFAが有効に機能する場面なればawkの圧勝だろう。
0975デフォルトの名無しさん
2007/02/20(火) 00:24:27こういうライブラリもうある?
0976デフォルトの名無しさん
2007/02/21(水) 22:36:09日常の雑事をbashとかawkなんかで済ませてるけどな。
GUIが必要ならVB使ったり、
HSPとかなでしこのようなフリーの安直な言語使ってる。
会社には一応情報の専門職もいるんだが、
簡単な事は全部自分達でやっちゃうから、彼らの立場がなくなってる。
そう考えると、エンドユーザーズ言語(簡易言語)を広めれば
企業にとっては無駄な情報屋を雇わなくて済むから得になるわけだ。
目的が特化され機能が絞られており、非オブジェクト指向で、
なおかつ日常でよくやるような作業が簡単にできる言語には大いに存在価値がある。
素人をプログラミングから遠ざけ、情報屋が仕事に困らなくなるような言語ばかりが世にはびこるのは良くないことだ。
0977デフォルトの名無しさん
2007/02/21(水) 22:55:40http://pc10.2ch.net/test/read.cgi/tech/1112553783/
AWKでCGI
http://pc10.2ch.net/test/read.cgi/php/1171804314/
0978デフォルトの名無しさん
2007/02/22(木) 20:04:25AWKでCGI
http://pc10.2ch.net/test/read.cgi/php/1171804314/
で紹介されてる
http://www.gnu.org/software/gawk/manual/gawkinet/gawkinet.html
を見てしまった。 gawk でsocketが使えるのね。知らんかった。
試しに、
gawk 'BEGIN { "/inet/tcp/0/192.168.0.99/110" |& getline; print $0; close("/inet/tcp/0/192.168.0.99/110") }'
とやったら、レスポンスが返ってきた。
誰か、SMTP でとやり取りするスクリプト作ってくれないかな。メールの中味(ヘッダも含む)
に対して gawk でごにょごにょやりたい。
0979デフォルトの名無しさん
2007/02/22(木) 21:55:23ムカツクこと言ってくれるねぇ。
本当の事を露骨に言うなよ。
0980デフォルトの名無しさん
2007/02/22(木) 22:58:160981デフォルトの名無しさん
2007/02/22(木) 23:17:200982デフォルトの名無しさん
2007/02/23(金) 12:11:360983デフォルトの名無しさん
2007/02/23(金) 19:09:37AWK の発音は "オーク" であるが、
これは日本語話者にとって不自然であるため、
“エー・ダブリュー・ケー”と発音する人がいる。
しかし AWK の教典こと『プログラミング言語AWK』の日本語版の序文では
制作者の一人であるブライアン・カーニハンは
決してそのような発音をしてはならないと主張している記載がある。
なお、この本の表紙に書かれているのは
オオウミガラス(GREAT AUK)でありその主張の強調でもある。
0984デフォルトの名無しさん
2007/02/23(金) 23:05:580985デフォルトの名無しさん
2007/02/23(金) 23:56:41http://pc10.2ch.net/test/read.cgi/tech/1172242542/
0986デフォルトの名無しさん
2007/02/24(土) 00:22:18使ってる人はオークと読んでいる。
0987デフォルトの名無しさん
2007/02/24(土) 00:33:340989デフォルトの名無しさん
2007/02/24(土) 07:39:330990デフォルトの名無しさん
2007/02/24(土) 14:19:230991デフォルトの名無しさん
2007/02/24(土) 14:57:14語尾につけるとかこいいよawwww
0992一応釣られておく
2007/02/24(土) 15:02:030993デフォルトの名無しさん
2007/02/24(土) 22:16:17レス数が950を超えています。1000を超えると書き込みができなくなります。