X



トップページLinux
270コメント86KB
awk ファンクラブ
0187login:Penguin
垢版 |
2011/11/29(火) 01:04:03.02ID:6tCpTQmb
ごめん、
awk '{if (match($0,"href=\"([0-9]{4}-[0-9][0-9]-[0-9][0-9])\"",a)) print a[1]}'
0188login:Penguin
垢版 |
2011/11/29(火) 16:01:19.31ID:vLvhB/JG
>>184-186
うーん、あまりわかりやすい方法ではないですね。
メンテナンスしにくいコードになってしまうので、perlが使えるよう上司に交渉したほうがよさそうです。
回答いただいた方、ありがとうございました。
0189login:Penguin
垢版 |
2011/11/29(火) 16:28:12.31ID:MmS6Zrem
>>185はともかく>>186-187の方がPerlみたいにグローバル変数にマッチ結果を入れるより分かりやすいと思うのって俺だけ?
0190login:Penguin
垢版 |
2011/11/29(火) 17:00:24.97ID:vLvhB/JG
>>189
186は、単にgawk独自の拡張機能を知ってないとわかりにくいというだけであり、
マッチした結果を明示的に変数に代入するのはいいことだと思います。
なお個人的には
match(string, rexp, matched)
はmatchedがいわゆるout変数になるため分かりにくいです。
matched = match(string, rexp)
のほうがよかったです。
0191login:Penguin
垢版 |
2011/11/29(火) 17:27:04.96ID:8ESv/UnH
>>190
何言っているのかちょっと分からん。言語仕様上awkは配列を返せないだろ
0192login:Penguin
垢版 |
2011/11/30(水) 00:16:56.92ID:CRejWMLU
gawk独自の実装はどうも…という話がよく出てくるけど、
gawk/mawk/true awk相互で運用する必要ってよくあるものなの?
またはbusyboxのawkで使いたいとか?
0193login:Penguin
垢版 |
2011/11/30(水) 02:39:57.37ID:TGbwU425
gawkは最早awkと呼ぶには拡張され過ぎている感じがある
よくあるかは知らないけど、少なくとも手元の環境には3種類のawkがあって、gawkの拡張が使えない
mawkはnextfileにも対応してないし、awkは実装の差がかなり大きいと思うよ
0194login:Penguin
垢版 |
2011/12/01(木) 00:38:55.88ID:cIbdY7f8
gawkが拡張されてるのは承知だが、gawk依存だとメンテが大変だから
perlというロジックが分かりにくい。

0195login:Penguin
垢版 |
2011/12/03(土) 01:06:16.24ID:0aRpOAWF
gawkで

(ああ(いい((うう)(ええ))))

この行の「ああ」「いい」「うう」「ええ」を変数に入れたい時、
何か定番な書き方はありますか?
0196login:Penguin
垢版 |
2011/12/03(土) 01:56:31.82ID:ivCb+cNz
何を期待しているのか分からん
括弧を区切りにして分けたいだけならFS="[()]+"で
配列に入れたいならsplitでどう?
0197login:Penguin
垢版 |
2011/12/03(土) 01:59:50.51ID:ivCb+cNz
もしかして括弧の対応をとりながら分けたいってことなら
gawkに詳しい別の誰かに期待してくれ。拡張正規表現でも無理じゃなかったか
0198login:Penguin
垢版 |
2013/03/07(木) 06:45:54.68ID:4D+kiInZ
str = "(ああ(いい((うう)(ええ))))"
while (match(str,/([^()]*)/)) {
v = substr(str,RSTART+1,RLENGTH-2)
str = substr(str,1,RSTART-1) substr(str,RSTART+RLENGTH)
if (v != "") {
# 取り出した v をなんかする
}
}
とかじゃ駄目なの?
ちゃんと構文解析するなら yacc (bison) を使わないと駄目だよ
0199login:Penguin
垢版 |
2013/03/12(火) 12:42:06.70ID:qyuXfAO9
      _
      |O\
      |   \ キリキリ
    ∧|∧   \ キリキリ
ググゥ>(;⌒ヽ    \
    ∪  |     (~)
     ∪∪   γ´⌒`ヽ
     ) )    {i:i:i:i:i:i:i:i:}
     ( (    ( ´・ω・)、
           (O ⌒ )O
            ⊂_)∪
0202login:Penguin
垢版 |
2013/03/20(水) 22:53:22.42ID:YjhinaPB
>>201
先輩ありがとう
++day を最初に持ってくるのはオイラも考えたんですが、break の条件式も反転して持ってくればおkかなと思って

$ diff time.awk time2.awk
34,35c34,35
<
< for (++day;;) {
---
> ++day;
> while (day >= year_days) {
49,52d48
< }
<
< if (day < year_days) {
< break;

てやったら1日ズレちゃったんだけどこれってどこがマズいんでしょうか (・ω・` )
0203login:Penguin
垢版 |
2013/03/22(金) 01:16:43.88ID:Jmj0m+XB
>>202
そのbreakの後にも続きの処理があるだろ。年もズレるんじゃない?
0204200
垢版 |
2013/03/24(日) 14:19:31.22ID:UI34mYpn
>>203
day の値を追っかけてみたら元のfor、変更後のwhileともに同じ値で終了してたので頭抱えてたんですが
もう少し調べてみたら leap の値がズレてました
break の前の処理が1回分少なかったということで、落ち着いて考えれば当たり前の結論でした (;´Д`)

結局この処理の場合は元々のスクリプトや >>201 のように無限ループ使うのが一番シンプルに
書けるんだなーと確認して納得しました。先輩方ありがとう
0205login:Penguin
垢版 |
2014/03/21(金) 06:08:21.56ID:+P5ZN4Ej
AWKを256倍使うための本が読みたいのですが
どうにかして入手できないでしょうか?
0207login:Penguin
垢版 |
2014/03/21(金) 13:50:53.67ID:2joEzm1b
たけえわ!
こういう本こそ電子版にしてくれねえかなあ
0208login:Penguin
垢版 |
2014/03/21(金) 22:38:59.40ID:+P5ZN4Ej
レスありがとうございます
高いけどあるといえばあるんですね
どうしようかな
020976
垢版 |
2014/03/21(金) 23:39:07.83ID:UPcdeELD
ブックオフで先週見たぞ
0210login:Penguin
垢版 |
2015/01/24(土) 09:55:38.14ID:gAuUge45
持ってたけどいつの間にか捨てていた
0211login:Penguin
垢版 |
2015/01/24(土) 12:11:48.77ID:4AXaMrRk
紙質が悪くてボロボロになった
0212login:Penguin
垢版 |
2015/02/03(火) 13:34:28.90ID:lZQLBw3l
Linuxも電子版出してほしいな(´・ω・`)
0213login:Penguin
垢版 |
2016/08/29(月) 23:40:58.70ID:W/IDgrhA
Gawk4.1.4出てたのか。
0215login:Penguin
垢版 |
2017/01/25(水) 11:01:32.67ID:6VFENplc
長年親しんだテキストの遊園地がなくなってて非常に悲しい
どっかにアーカイブないっすか
0216login:Penguin
垢版 |
2017/03/17(金) 05:15:18.56ID:RjcJSjOQ
>>215
で、それはいつできるんだ?
できたらURL貼るのを忘れんなよ
0218218
垢版 |
2017/07/10(月) 19:23:00.44ID:EatnUbnm
おばんです。
Linux環境の方にお願いします。
下記にあるblength()を試してもらえませんか?
http://www1.bbiq.jp/rem_vba/gawk_blength.html
よろしくお願いします。
0219デフォルトの名無しさん
垢版 |
2017/07/11(火) 08:37:02.92ID:7nEGt2Mb
なぜそれを Linux で? 何を知りたい?
0220218
垢版 |
2017/07/11(火) 08:56:48.21ID:WwRbMPQQ
HP製作者です。当方の環境はWindowsです。
Linux環境下で同じ実行結果を得ることができるのか、
知りたいのです。
よろしくお願いします。
0221login:Penguin
垢版 |
2017/07/11(火) 11:06:05.29ID:DDC9W9sY
いい機会だからLinux入れちゃえば
0222218
垢版 |
2017/07/11(火) 11:10:26.52ID:WwRbMPQQ
それもそうですね。
昔々REDHATだったか入れていました。
現在のおすすめのディストリビューションは何でしょうか?
0223login:Penguin
垢版 |
2017/07/11(火) 12:32:44.18ID:tm800Hl5
今はMS製のcygwinみたいのがあるのでは。Windows 10 Bashナントカ
0224218
垢版 |
2017/07/11(火) 12:42:28.77ID:b8V9VslP
Windows 10 Creators UpdateでUbuntu 16.04.1 これかな。
やってみます。ありがとうございました。
0225login:Penguin
垢版 |
2017/11/21(火) 02:37:01.57ID:PQah4bj0
jgawkをガウォークって読んでたマクロスヲタいない
0226login:Penguin
垢版 |
2017/12/29(金) 14:37:58.78ID:S/CsVkMC
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

DCQTVO9E2N
0227login:Penguin
垢版 |
2018/01/15(月) 20:15:48.31ID:eZF7GqQ1
空の配列はどう作るの。
bashの declare -a var 相当。
0228login:Penguin
垢版 |
2018/05/22(火) 08:18:57.94ID:Czl6p0FW
僕の知り合いの知り合いができた副業情報ドットコム
関心がある人だけ見てください。
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

V09DR
0230login:Penguin
垢版 |
2018/12/26(水) 23:28:57.46ID:41RDdYnE
awk だけど実行ファイルのフォーマットは ELF …いや、なんでもないです。
0231login:Penguin
垢版 |
2019/02/17(日) 10:18:47.85ID:tq2CmSlw
初心者ですが正規表現で半角をすべてというのはどうやるんでしたっけ
どっかで見たような気がするんですが
0233login:Penguin
垢版 |
2019/02/18(月) 16:59:38.97ID:bs/RCYIZ
>>227
Awk の識別しは、最初っから空の配列だよ
いきなり使えば良い
0234login:Penguin
垢版 |
2019/02/18(月) 17:04:21.28ID:bs/RCYIZ
みなさんはgawk以外の処理系に移植できるか
とか、多少でも考えますか?私は気にしなくなりました。
他にも幾つか実装があるにはあるんですが、あんまり
活発じゃないし、言及もされないし、こだわりすぎると
不便でしょうがないから、気にしなくなりました。
けしからんでしょうか?
0235login:Penguin
垢版 |
2019/02/18(月) 20:36:34.78ID:uVw99/R9
GNU awkが事実上標準だからPOSIX準拠は気にしないな
0236login:Penguin
垢版 |
2019/02/22(金) 21:05:04.57ID:HUsgEyAs
AWK48!!
0237login:Penguin
垢版 |
2019/04/17(水) 15:19:28.33ID:j5OQY4r8
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環境が想定されるようになっています。

そして新たに名前空間が実装されています(詳細はマニュアルを参照とのこと)。
0238login:Penguin
垢版 |
2019/04/17(水) 17:39:45.30ID:oKn1+k+8
名前空間って、これまでのスクリプトが動かなくなるんだべか。
0239238
垢版 |
2019/04/17(水) 22:27:02.77ID:oKn1+k+8
さすがにそれは無かった。
$ 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
$
0241login:Penguin
垢版 |
2019/12/10(火) 14:57:28.86ID:RI3PNloA
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)
0242login:Penguin
垢版 |
2019/12/10(火) 15:04:17.01ID:RI3PNloA
追記
gawkを動かす環境はubuntu19.04で、主にWindowsからteratermでsshログインしての使用を考えています。
0243login:Penguin
垢版 |
2019/12/10(火) 19:53:29.48ID:/8T+qheh
>>241
awkじゃなきゃあかんの?
cursesでやればいいと思うけど
0244login:Penguin
垢版 |
2019/12/11(水) 00:25:34.40ID:ysC5v/gW
>>243
awkでやりたいんですよ。
cursesってawk用ライブラリありましたっけ?

自分アホなりに色々調べて、"read -n 1" をうまく使えば文字コード取れそうという所までは気がついたんですが、
これをawkスクリプト中で実行させて戻り値をawk変数に取り込む方法がわかりません。
どうすれば文字コードが取れるんでしょう?
0245login:Penguin
垢版 |
2019/12/11(水) 03:25:34.73ID:YST7j856
試さないで適当に書いてみるけど
一文字読みとる command 用意して
command | getline var
もしくは入力された文字を終了ステータスとして返す command で
var = system(command)
0246login:Penguin
垢版 |
2019/12/11(水) 09:57:26.52ID:JotyB0zR
試してから書きゃいいのに。
0247login:Penguin
垢版 |
2019/12/11(水) 17:11:40.69ID:w4fDC3xv
>>244
確かにそれはちゃんと機能する。しかし、矢印キーとなると話は別だ。
矢印キーは 3 バイトだから。
1 バイト読んで ESC だったらもっと読むということになる。
もちろん ESC じゃなかった場合のことも考える。
想定した処理が全部終わった後で、印字可能文字で 1 行で出力する
…というプログラムを C で書くということになるかなあ。
ところでエコーバックはどうする? 多分、こんなこともしたくなるんじゃないか。
https://qiita.com/Ki4mTaria/items/36feda5f6aa54643775a

dialog とか使った方がいいんじゃないかな。
0248login:Penguin
垢版 |
2019/12/12(木) 01:58:28.69ID:+gdBEfoc
なんかすみません。
dialog & shell & awkでできるのはわかってるんですが、なんか負けたような気がしてw
なんとかshellのコマンドか標準で入っている外部コマンド & awkでできないもんかと思ったんです。
Linux ←→ Windowsのポータビリティを考えた場合、やはり1文字入力してそれを返すだけの小さなプログラムをCで作ってawkでそれを呼んで戻り値を得るのが一番手っ取り早いのかな、と思いつつあるところです。
でも、もう少し最初の路線で調べてみます。徒労に終わりそうな気はしますが。
0249247
垢版 |
2019/12/12(木) 16:49:42.78ID:Ks56aDFp
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 行で受け取るほうがいいかもしれない。
もっとも、入力元を共有しているから食べ残しが問題になるのであって
新たに端末エミュレータを起動してその上で実行するのなら問題にならない。
パイプが繋がらないから別の方法で結果を返す必要はあるが、メニューを出して
ユーザに選択させるという用途なら悪くない方法かもしれない。
0250login:Penguin
垢版 |
2019/12/12(木) 17:04:12.98ID:Ks56aDFp
そもそも「リターンキーで決定」とかなら食べ残しの心配は無いかな?
0251login:Penguin
垢版 |
2019/12/13(金) 04:10:04.34ID:For+FbwN
ありがとうございます。
-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");
}

今日はもう寝ます
0252login:Penguin
垢版 |
2019/12/13(金) 09:49:46.45ID:WFJlAa92
perlとかでやれよ。
awkで簡単に出来ることをsed+grepで頑張る人達がクダスレ辺りに沢山いるが、それと同等だろう。
知恵の輪としては面白いけれど、成果には乏しいのでないか。
0253login:Penguin
垢版 |
2019/12/13(金) 13:58:14.66ID:+ky049vi
それを言っちゃあおしまいよ
0254login:Penguin
垢版 |
2019/12/13(金) 20:04:51.41ID:For+FbwN
なんか、返事するのがアホくさくなってきました。
さようなら。
0255login:Penguin
垢版 |
2019/12/13(金) 23:44:48.59ID:gNHNDwLS
awkはまずデータファイルありきで便利なものだしねえ。
趣味でどういう使い方しても勝手だけど。
0256login:Penguin
垢版 |
2019/12/14(土) 09:10:47.22ID:b3dqliHo
>>254
Perl を知っていながら awk でやろうってんだから、この程度のことは予想できたでしょう。
無視してりゃいいんだよ。
もっとも、真剣に取り組んでいるなら他の場所を探してもいいかもしれない。
でもここにも君を助けようとした者がいたことは覚えておいてほしい。
0257login:Penguin
垢版 |
2019/12/14(土) 09:34:23.87ID:b3dqliHo
あっ、某知恵袋はやめときなさい。あそこは知ったかぶりが多いから。
知らないなら回答しなきゃいいのにね。
0258login:Penguin
垢版 |
2019/12/14(土) 10:22:52.96ID:pIVSIbEK
>>257
Linuxオタが集う外国の掲示板当たりの良いのかもな
普通のLinuxユーザーなら、awkにこだわりすぎの変な奴だになって
相手にしてはいけない・からかってやれだろうからな。
0259login:Penguin
垢版 |
2021/02/19(金) 05:12:44.08ID:m+sRJxZf
>>249
bashはreadline組み込まれてるので使って良いんじゃないかな?
あとライン毎にバッファしてるのが問題な気がするから、stdbuf cmdでcmdの参照してるstdlibをすり替えられて、一文字毎にflushする用に出来たりするがどうだろう
0260login:Penguin
垢版 |
2021/12/29(水) 17:13:13.59ID:2+qwQ610
busyboxのお陰でやっとwindowsでawkを使う気になれた
やっぱり良いツールだな
0261login:Penguin
垢版 |
2022/01/10(月) 19:56:17.76ID:CxUz26hu
winget install awkで入る(g)awkじゃいかんの?
今のところ困った事はない
0262login:Penguin
垢版 |
2022/01/19(水) 11:13:08.41ID:LY9w68e5
他のunixコマンドと連携して使いたかった
そこでいつもやる気なくしてた
0263login:Penguin
垢版 |
2022/01/19(水) 15:45:06.70ID:UQUeA/41
chocoやら乱立してたパッケマネがやっとMS公認の下で統合されたことだし、整合性も良くなってくんじゃないの
楽観的予測
0264login:Penguin
垢版 |
2022/02/21(月) 11:06:13.16ID:zLs4IRDg
awkwardな所にキュンとする
0265login:Penguin
垢版 |
2022/05/27(金) 17:18:00.89ID:zmLBeAi1
こんにちはPOSIX原理主義者です。何か質問ある?
0266login:Penguin
垢版 |
2022/05/27(金) 17:29:05.92ID:S4nvBfyf
今のところ使用上困ってることは無いんだけどせっかくなのでひとつ質問を
nawk, mawk, gawk どれが最もPOSIX準拠?
出来れば標準的なやつで修行しておきたいので
0267login:Penguin
垢版 |
2022/05/28(土) 01:45:13.16ID:6jvPj11k
>>266
全部POSIX準拠。ただし全部POSIXに準拠してないところがある。
0268login:Penguin
垢版 |
2022/05/28(土) 08:00:52.09ID:SKCSltUT
本来の文字列整形だけなら3つともあまり変わらん気がするけど
出過ぎた事を言わない方がいいんだろうな
0269login:Penguin
垢版 |
2022/05/28(土) 09:25:14.43ID:ystZjCC8
全部POSIX準拠だけど、Unicodeに対応してるのはgawkだけで
lengthの長さが違うとかいう違いがある。

そもそもPOSIXはCロケールしか考慮されてないので
Unicode非対応でもPOSIX準拠。
レスを投稿する


ニューススポーツなんでも実況