awk ファンクラブ
■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin
2008/07/07(月) 20:45:18ID:wYmB5VwU0173login:Penguin
2011/08/21(日) 16:45:12.36ID:iSpKRH150174login:Penguin
2011/08/21(日) 18:45:31.99ID:EL3rN3cw0175login:Penguin
2011/08/21(日) 18:56:18.08ID:Fst2eXVDそれ、CSVとかでもよく語られることだけど、意外と面倒なのよ。
例えば「"」自体を文字列に入れたい場合はどうするのか、とか色々決めなきゃならんし。
0176170
2011/08/21(日) 19:12:48.13ID:yoctsNv6ttp://ja.wikibooks.org/wiki/AWK%2B%2B%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%85%A5%E9%96%80
0177login:Penguin
2011/08/21(日) 19:24:48.22ID:yoctsNv6素直に区切り文字を変えるしか...
ふるいけや,かわず とびこむ,みずのおと
FS=","
0178172
2011/08/21(日) 22:01:39.45ID:Mb9j323GBEGIN { FPAT = "([^" FS "]+)|(\"[^\"]+\")" }
みたいな事をしました。
0179login:Penguin
2011/08/22(月) 10:27:15.81ID:bf5ta6rsRFC4180 互換なフィールド分割オプションを実装すればいいのにといつも思う。
0180login:Penguin
2011/08/22(月) 10:33:38.59ID:uwcmdhh80181login:Penguin
2011/08/22(月) 11:11:08.80ID:4smqF+KA0182login:Penguin
2011/11/28(月) 19:46:48.89ID:NIKBR+N1と同じことをawkでやろうとしているのですがわかりません。
awk -e '/href="(¥d¥d¥d¥d-¥d¥d¥-¥d¥d)"/ { print ??? }'
グルーピングしたあとにそれを取り出す方法を探したのですが、わかりませんでした。
awkまたはsedでのやり方を教えて下さい。
0183login:Penguin
2011/11/28(月) 20:46:46.52ID:skmC2JM9馬鹿じゃないあなたに是非>>182の回答をしてもらおうか。
0184login:Penguin
2011/11/28(月) 21:15:52.48ID:Oo5SGhpXperl がわからないから求めるものがよくわからないけれど、こんな感じ?
awk '/href=\"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\"/ {print $1}' input.html
awk '/href=\"\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\)\"/ {print $1}' input.html
BEGIN とか使ったほうがいいのかもしれないけれど
awk '/href=\"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\"/ {print $1} BEGIN { 何か書く }' input.html
0185login:Penguin
2011/11/28(月) 23:48:15.14ID:mynsjW2oどのawk使っているか分からないし、入力の仕様も分からないけど、どこでも動くのはこんな感じ
awk -F\" '/href=/ { for (i=1; i<=NF; i++) if ($i ~ /href=$/ && $(i+1) ~ /[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/) print $++i }'
gawkでも正規表現パターンのグループを保存している組み込み変数はなかった気がする
0186login:Penguin
2011/11/29(火) 00:49:47.68ID:6tCpTQmbawk '{if (match($0,"href=([0-9]{4}-[0-9][0-9]-[0-9][0-9])",a)) print a[1]}'
じゃ駄目?
0187login:Penguin
2011/11/29(火) 01:04:03.02ID:6tCpTQmbawk '{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うーん、あまりわかりやすい方法ではないですね。
メンテナンスしにくいコードになってしまうので、perlが使えるよう上司に交渉したほうがよさそうです。
回答いただいた方、ありがとうございました。
0189login:Penguin
2011/11/29(火) 16:28:12.31ID:MmS6Zrem0190login:Penguin
2011/11/29(火) 17:00:24.97ID:vLvhB/JG186は、単にgawk独自の拡張機能を知ってないとわかりにくいというだけであり、
マッチした結果を明示的に変数に代入するのはいいことだと思います。
なお個人的には
match(string, rexp, matched)
はmatchedがいわゆるout変数になるため分かりにくいです。
matched = match(string, rexp)
のほうがよかったです。
0191login:Penguin
2011/11/29(火) 17:27:04.96ID:8ESv/UnH何言っているのかちょっと分からん。言語仕様上awkは配列を返せないだろ
0192login:Penguin
2011/11/30(水) 00:16:56.92ID:CRejWMLUgawk/mawk/true awk相互で運用する必要ってよくあるものなの?
またはbusyboxのawkで使いたいとか?
0193login:Penguin
2011/11/30(水) 02:39:57.37ID:TGbwU425よくあるかは知らないけど、少なくとも手元の環境には3種類のawkがあって、gawkの拡張が使えない
mawkはnextfileにも対応してないし、awkは実装の差がかなり大きいと思うよ
0194login:Penguin
2011/12/01(木) 00:38:55.88ID:cIbdY7f8perlというロジックが分かりにくい。
0195login:Penguin
2011/12/03(土) 01:06:16.24ID:0aRpOAWF(ああ(いい((うう)(ええ))))
この行の「ああ」「いい」「うう」「ええ」を変数に入れたい時、
何か定番な書き方はありますか?
0196login:Penguin
2011/12/03(土) 01:56:31.82ID:ivCb+cNz括弧を区切りにして分けたいだけならFS="[()]+"で
配列に入れたいならsplitでどう?
0197login:Penguin
2011/12/03(土) 01:59:50.51ID:ivCb+cNzgawkに詳しい別の誰かに期待してくれ。拡張正規表現でも無理じゃなかったか
■ このスレッドは過去ログ倉庫に格納されています