2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

awk ファンクラブ

1 :login:Penguin:2008/07/07(月) 20:45:18 ID:wYmB5VwU.net
おーくについて語りましょう

226 :login:Penguin:2018/01/15(月) 20:15:48.31 ID:eZF7GqQ1.net
空の配列はどう作るの。
bashの declare -a var 相当。

227 :login:Penguin:2018/05/22(火) 08:18:57.94 ID:Czl6p0FW.net
僕の知り合いの知り合いができた副業情報ドットコム
関心がある人だけ見てください。
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

V09DR

228 :login:Penguin:2018/08/06(月) 01:01:52.57 ID:lYVh6drB.net
Linux Beep Musicに感動したのでnokia2beeps.tclを移植してみた
https://pastebin.com/hLJnpPNv
nokia2beeps.awkとか保存し下記のページのコードを鳴らすやつ
http://nokia.nigelcoldwell.co.uk/tunes.html
あと日本語の着メロも対応してる(コメント参照)

229 :login:Penguin:2018/12/26(水) 23:28:57.46 ID:41RDdYnE.net
awk だけど実行ファイルのフォーマットは ELF …いや、なんでもないです。

230 :login:Penguin:2019/02/17(日) 10:18:47.85 ID:tq2CmSlw.net
初心者ですが正規表現で半角をすべてというのはどうやるんでしたっけ
どっかで見たような気がするんですが

231 :login:Penguin:2019/02/17(日) 14:29:57.54 ID:kuwCjzfH.net
「半角」ってどう定義するのか難しいな
この辺読んでがんばれ
https://www.gnu.org/software/gawk/manual/gawk.html#Bracket-Expressions

232 :login:Penguin:2019/02/18(月) 16:59:38.97 ID:bs/RCYIZ.net
>>226
Awk の識別しは、最初っから空の配列だよ
いきなり使えば良い

233 :login:Penguin:2019/02/18(月) 17:04:21.28 ID:bs/RCYIZ.net
みなさんはgawk以外の処理系に移植できるか
とか、多少でも考えますか?私は気にしなくなりました。
他にも幾つか実装があるにはあるんですが、あんまり
活発じゃないし、言及もされないし、こだわりすぎると
不便でしょうがないから、気にしなくなりました。
けしからんでしょうか?

234 :login:Penguin:2019/02/18(月) 20:36:34.78 ID:uVw99/R9.net
GNU awkが事実上標準だからPOSIX準拠は気にしないな

235 :login:Penguin:2019/02/22(金) 21:05:04.57 ID:HUsgEyAs.net
AWK48!!

236 :login:Penguin:2019/04/17(水) 15:19:28.33 ID:j5OQY4r8.net
GNU AWK 5.0がリリース。8年ぶりのメジャーバージョンアップ。正規表現ライブラリが
GLIBCからGNULIBへ移行、名前空間が実装 2019年4月17日
https://www.publickey1.jp/blog/19/gnu_awk_508glibcgnulib.html

UnixやLinuxにおいてsedやgrepなどと並んでよく知られているツールの1つがawk(オーク)
です。このawkのGNUプロジェクトによる実装の最新版「GNU AWK 5.0」(gawk 5.0)の
リリースが発表されました。

2011年にリリースされたGNU AWK 4.0から8年ぶり、直前のバージョンでとして2017年10月に
リリースされた4.2.0からは約1年半ぶりとなります。

AWKはいわゆるスクリプティング言語の一種。変数や関数、制御文など基本的な構文を備え、
テキストファイルを効率的に処理できるのが特徴です。

GNU AWK 5.0の新機能としては、printfの%aおよび%Aの書式がPOSIX標準に準拠したこと、
正規表現のルーチンが、長年にわたってメンテナンスされてきたGLIBCからGNULIBに
置き換わったことなど。

また、識別子に非英語文字を使うためのドキュメント化されていなかったオプションなどは
削除され、ソースコードはC99環境が想定されるようになっています。

そして新たに名前空間が実装されています(詳細はマニュアルを参照とのこと)。

237 :login:Penguin:2019/04/17(水) 17:39:45.30 ID:oKn1+k+8.net
名前空間って、これまでのスクリプトが動かなくなるんだべか。

238 :238:2019/04/17(水) 22:27:02.77 ID:oKn1+k+8.net
さすがにそれは無かった。
$ gawk --version
GNU Awk 5.0.0, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)
:
$ gawk 'BEGIN{print awk::ARGC}'
1
$ gawk 'BEGIN{print ARGC}'
1
$

239 :login:Penguin:2019/12/04(水) 08:39:54 ID:EOFhhwOn.net
ageで行こう

240 :login:Penguin:2019/12/04(水) 18:18:20.57 ID:8Zd1xJ0mr
>>226
BEGIN {
for (i in a); #空配列作成

if (isarray(a)) print "aは配列である";
else print "aは配列でない";
}

241 :login:Penguin:2019/12/10(火) 14:57:28.86 ID:RI3PNloA.net
gawkでキーボードから一文字入力をしたいんですが、何かいい方法ないでしょうか?
stdinをgetlineするのではなく、キーを何か一つ押したときにそのコードを即座にgawkで受け取りたいんです。

具体的に何がしたいのかというと、BEGIN内部でスクリプトの動作を設定するパラメタをキーボードで指示したいんですが、
その支持を矢印キーでメニュー選択させたいんです。
ターミナルのエスケープシーケンスはVT100環境を想定しています。
何かヒントでもいいので一文字入力の方法を教えてください〜

gawkはこれ使ってます。
GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)

242 :login:Penguin:2019/12/10(火) 15:04:17.01 ID:RI3PNloA.net
追記
gawkを動かす環境はubuntu19.04で、主にWindowsからteratermでsshログインしての使用を考えています。

243 :login:Penguin:2019/12/10(火) 19:53:29.48 ID:/8T+qheh.net
>>241
awkじゃなきゃあかんの?
cursesでやればいいと思うけど

244 :login:Penguin:2019/12/11(水) 00:25:34.40 ID:ysC5v/gW.net
>>243
awkでやりたいんですよ。
cursesってawk用ライブラリありましたっけ?

自分アホなりに色々調べて、"read -n 1" をうまく使えば文字コード取れそうという所までは気がついたんですが、
これをawkスクリプト中で実行させて戻り値をawk変数に取り込む方法がわかりません。
どうすれば文字コードが取れるんでしょう?

245 :login:Penguin:2019/12/11(水) 03:25:34.73 ID:YST7j856.net
試さないで適当に書いてみるけど
一文字読みとる command 用意して
command | getline var
もしくは入力された文字を終了ステータスとして返す command で
var = system(command)

246 :login:Penguin:2019/12/11(水) 09:57:26 ID:JotyB0zR.net
試してから書きゃいいのに。

247 :login:Penguin:2019/12/11(水) 17:11:40 ID:w4fDC3xv.net
>>244
確かにそれはちゃんと機能する。しかし、矢印キーとなると話は別だ。
矢印キーは 3 バイトだから。
1 バイト読んで ESC だったらもっと読むということになる。
もちろん ESC じゃなかった場合のことも考える。
想定した処理が全部終わった後で、印字可能文字で 1 行で出力する
…というプログラムを C で書くということになるかなあ。
ところでエコーバックはどうする? 多分、こんなこともしたくなるんじゃないか。
https://qiita.com/Ki4mTaria/items/36feda5f6aa54643775a

dialog とか使った方がいいんじゃないかな。

248 :login:Penguin:2019/12/12(木) 01:58:28.69 ID:+gdBEfoc.net
なんかすみません。
dialog & shell & awkでできるのはわかってるんですが、なんか負けたような気がしてw
なんとかshellのコマンドか標準で入っている外部コマンド & awkでできないもんかと思ったんです。
Linux ←→ Windowsのポータビリティを考えた場合、やはり1文字入力してそれを返すだけの小さなプログラムをCで作ってawkでそれを呼んで戻り値を得るのが一番手っ取り早いのかな、と思いつつあるところです。
でも、もう少し最初の路線で調べてみます。徒労に終わりそうな気はしますが。

249 :247:2019/12/12(木) 16:49:42.78 ID:Ks56aDFp.net
bash でも出来なくはないと思う。読むだけならいくらでも出来る。
しかし、「残さず食べる」ということを考えると read -n はちょっと…
なぜこれを考える必要があるかというと、食べ残しがあるとたとえばシェルの場合なら
それをコマンドラインだと思って読んでしまっだりする。
read -n は食べ残しが無かったら入力待ちになってしまうので適していないと思う。
他人に使わせるプログラムなら常に意識しておくべきことかもしれない。
そこで、まだ試してないならこんなことを試してみてほしい。

BEGIN {
cmd = "bash -c 'TMOUT=5 ; read -N 8 v ; echo \"$v\" ;'"
for( i = 0; i < 8; i++){
while ( 0 < ( cmd | getline)){
print "i=" i ", 0=[" $0 "]"
}
close( cmd)
}
}

得られたデータの長さが指定した長さに達していないならタイムアウトで終了した。
つまり、食べ残しは無いということになると思う。
ただし、改行の扱いがめんどくさい。
bash は read で読んだ改行をちゃんと送っているのだが getline が削除してしまう。
そして最後の改行は echo が加えたもので、read で読んだのではない。
awk の方で RS の値を変えることでめんどくささが減る可能性はある。
しかしやはり最終結果だけを 1 行で受け取るほうがいいかもしれない。
もっとも、入力元を共有しているから食べ残しが問題になるのであって
新たに端末エミュレータを起動してその上で実行するのなら問題にならない。
パイプが繋がらないから別の方法で結果を返す必要はあるが、メニューを出して
ユーザに選択させるという用途なら悪くない方法かもしれない。

250 :login:Penguin:2019/12/12(木) 17:04:12.98 ID:Ks56aDFp.net
そもそも「リターンキーで決定」とかなら食べ残しの心配は無いかな?

251 :login:Penguin:2019/12/13(金) 04:10:04.34 ID:For+FbwN.net
ありがとうございます。
-Nオプションでタイムアウト指定をするというのは目からウロコでした。
秒数を1にして、できるだけレスポンスのいい動きをさせようと思います。
矢印キーは3文字、Fnキーは5文字になるんですね。
そんなことも知りませんでした(汗

今日はawkにはpythonやperlにはあるord関数とchr関数が無いことを知って愕然としてました(笑)
文字を受け取ったはいいものの、文字コードをどうやって調べようかと悩んで行き着いた先のコードです。
笑ってやってください。

function ctblmake(ctbl) {
for (i = 0; i < 255; i++) {
ctbl = ctbl sprintf("%c", i);
}
return ctbl;
}
function ordhex(c) {
return sprintf("%02x", index(ctbl, c)-1);
}
BEGIN {
ctbl = "";
ctbl = ctblmake(ctbl);

print ordhex("?");
print ordhex("c");
print ordhex("b");
}

今日はもう寝ます

252 :login:Penguin:2019/12/13(金) 09:49:46.45 ID:WFJlAa92.net
perlとかでやれよ。
awkで簡単に出来ることをsed+grepで頑張る人達がクダスレ辺りに沢山いるが、それと同等だろう。
知恵の輪としては面白いけれど、成果には乏しいのでないか。

253 :login:Penguin:2019/12/13(金) 13:58:14.66 ID:+ky049vi.net
それを言っちゃあおしまいよ

254 :login:Penguin:2019/12/13(金) 20:04:51.41 ID:For+FbwN.net
なんか、返事するのがアホくさくなってきました。
さようなら。

255 :login:Penguin:2019/12/13(金) 22:45:11.81 ID:db+XusY3P
頭使って面白いなら、贅沢に時間使ってAWKでできること
何でもやるべき
時間がなきゃ252みたいになる
成果?笑わせる

256 :login:Penguin:2019/12/13(金) 23:44:48.59 ID:gNHNDwLS.net
awkはまずデータファイルありきで便利なものだしねえ。
趣味でどういう使い方しても勝手だけど。

257 :login:Penguin:2019/12/14(土) 09:10:47.22 ID:b3dqliHo.net
>>254
Perl を知っていながら awk でやろうってんだから、この程度のことは予想できたでしょう。
無視してりゃいいんだよ。
もっとも、真剣に取り組んでいるなら他の場所を探してもいいかもしれない。
でもここにも君を助けようとした者がいたことは覚えておいてほしい。

258 :login:Penguin:2019/12/14(土) 09:34:23.87 ID:b3dqliHo.net
あっ、某知恵袋はやめときなさい。あそこは知ったかぶりが多いから。
知らないなら回答しなきゃいいのにね。

259 :login:Penguin:2019/12/14(土) 10:22:52.96 ID:pIVSIbEK.net
>>258
Linuxオタが集う外国の掲示板当たりの良いのかもな
普通のLinuxユーザーなら、awkにこだわりすぎの変な奴だになって
相手にしてはいけない・からかってやれだろうからな。

260 :login:Penguin:2020/01/01(水) 02:33:22.62 ID:TglKmVwfj
>>259
海外の方が盛でしょうしね

261 :login:Penguin:2020/01/23(木) 22:20:41.03 ID:uGOVD2VtY
teratailというところでawkの質問・回答見てきたけど
あんまりおもしろくなかった
純粋にawkの質問というのが少ない
この板は貴重、保護するに値する
やる気をスポイルするの今度から禁止な

262 :login:Penguin:2020/02/04(火) 15:23:00.78 ID:n/qS2PYXS
英語は苦手ですが海外の掲示板に以下の質問を投稿しました
題:文字列から1文字ずつ抽出
AWK:文字列の先頭から末尾まで1文字ずつ取り出す場合
こんな風に記述されたものをよく見かけます
例:
function rev1(str, i, ret) {
for (i = 1; i <= length(str); i++)
ret = substr(str, i, 1) ret;
return ret;
}

私は、length()を使う必要はないと思っています
function rev2(str, ch, i, ret) {
while (ch = substr(str, ++i, 1))
ret = ch ret;
return ret;
}
これは動作しますが、間違っていませんか? と書きました

rev1():定番パターンですが、このケースでfor+length()は、
文字列を先頭から末尾まで全部読むにも拘わらず、
文字列全体の長さをあらかじめ調べるという
「頭の悪いアルゴリズム」で成り立っています
もう少しスマートな方法があるかもしれないと考えたものがrev2()です
回答いただいた外国の方との根源的な部分の共感はやはり難しいです
英語勉強しないと

263 :login:Penguin:2020/02/07(金) 12:59:08.35 ID:qmwRbkdNN
【日本】 コカコーラ、ラーコカコ 【イスラエル】
http://lavender.5ch.net/test/read.cgi/min/1575174748/l50

264 :login:Penguin:2021/02/19(金) 05:12:44.08 ID:m+sRJxZf.net
>>249
bashはreadline組み込まれてるので使って良いんじゃないかな?
あとライン毎にバッファしてるのが問題な気がするから、stdbuf cmdでcmdの参照してるstdlibをすり替えられて、一文字毎にflushする用に出来たりするがどうだろう

265 :login:Penguin:2021/12/29(水) 17:13:13.59 ID:2+qwQ610.net
busyboxのお陰でやっとwindowsでawkを使う気になれた
やっぱり良いツールだな

266 :login:Penguin:2022/01/10(月) 19:56:17.76 ID:CxUz26hu.net
winget install awkで入る(g)awkじゃいかんの?
今のところ困った事はない

267 :login:Penguin:2022/01/19(水) 11:13:08.41 ID:LY9w68e5.net
他のunixコマンドと連携して使いたかった
そこでいつもやる気なくしてた

268 :login:Penguin:2022/01/19(水) 15:45:06.70 ID:UQUeA/41.net
chocoやら乱立してたパッケマネがやっとMS公認の下で統合されたことだし、整合性も良くなってくんじゃないの
楽観的予測

269 :login:Penguin:2022/02/21(月) 11:06:13.16 ID:zLs4IRDg.net
awkwardな所にキュンとする

270 :login:Penguin:2022/05/27(金) 17:18:00.89 ID:zmLBeAi1.net
こんにちはPOSIX原理主義者です。何か質問ある?

271 :login:Penguin:2022/05/27(金) 17:29:05.92 ID:S4nvBfyf.net
今のところ使用上困ってることは無いんだけどせっかくなのでひとつ質問を
nawk, mawk, gawk どれが最もPOSIX準拠?
出来れば標準的なやつで修行しておきたいので

272 :login:Penguin:2022/05/28(土) 01:45:13.16 ID:6jvPj11k.net
>>271
全部POSIX準拠。ただし全部POSIXに準拠してないところがある。

273 :login:Penguin:2022/05/28(土) 08:00:52.09 ID:SKCSltUT.net
本来の文字列整形だけなら3つともあまり変わらん気がするけど
出過ぎた事を言わない方がいいんだろうな

274 :login:Penguin:2022/05/28(土) 09:25:14.43 ID:ystZjCC8.net
全部POSIX準拠だけど、Unicodeに対応してるのはgawkだけで
lengthの長さが違うとかいう違いがある。

そもそもPOSIXはCロケールしか考慮されてないので
Unicode非対応でもPOSIX準拠。

275 :76:2024/04/09(火) 09:52:04.48 ID:ixlG1zDd.net
https://twitter.com/oreilly_japan/status/1771033397969953039
(deleted an unsolicited ad)

73 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★