腐っても鯛? 騏も老いては駑馬に劣る?
三人の碩学が生み出したスクリプト言語AWKについて語るスレ
◆ 前スレ
awkについて語るスレ
http://pc10.2ch.net/test/read.cgi/tech/1023556171/
◆ 関係スレ
シェルスクリプト相談室
http://pc10.2ch.net/test/read.cgi/tech/1112553783/
AWKでCGI
http://pc10.2ch.net/test/read.cgi/php/1171804314/
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc10.2ch.net/test/read.cgi/linux/1154578200/
◆ 参考
The AWK Programming Language (Brian Kernighan):
ttp://cm.bell-labs.com/cm/cs/awkbook/index.html
GAWK (GNU Projedt):
ttp://www.gnu.org/software/gawk/
awkについて語るスレ $2
■ このスレッドは過去ログ倉庫に格納されています
2007/02/23(金) 23:55:42
212デフォルトの名無しさん
2008/11/12(水) 23:57:16 >print はそのままでいいのでしょうか?
まず試せよw
まず試せよw
213デフォルトの名無しさん
2008/11/13(木) 14:17:14 新紀元社のプログラミング言語awkがどこも売り切れなんだけど
もう入らないのかな
もう入らないのかな
214デフォルトの名無しさん
2008/11/16(日) 03:02:56215デフォルトの名無しさん
2008/11/18(火) 11:28:33 カンマ区切りのデータファイルがあり、その中で、第1フィールドと第3フィールド内にもし
子音、子音、子音、母音が存在すればその行だけ抜き出すオークのスクリプトファイルをつくりたいのですがどうすればよいですか
子音、子音、子音、母音が存在すればその行だけ抜き出すオークのスクリプトファイルをつくりたいのですがどうすればよいですか
216デフォルトの名無しさん
2008/11/18(火) 11:41:15 >>215
データファイルのサンプルと抜き出したい行ヨロ
データファイルのサンプルと抜き出したい行ヨロ
217デフォルトの名無しさん
2008/11/18(火) 11:50:40 こんな感じです
takeshi,fiad,fdjioaf,fdjsoafds(←該当なし)
dddacea,fsaofsa,rrra,fjisaofdjsa(dddaとrrraが該当)
aexxxu,dsoifsa,yyyuo,fjsaofa(xxxuとyyyuが該当)
takeshi,fiad,fdjioaf,fdjsoafds(←該当なし)
dddacea,fsaofsa,rrra,fjisaofdjsa(dddaとrrraが該当)
aexxxu,dsoifsa,yyyuo,fjsaofa(xxxuとyyyuが該当)
218びぎなぁ
2008/11/18(火) 12:12:55 オークスクリプトを実行すると情報を表示するようにしたのですが1行目と最後の行だけを表示しないようにするには
END内に何て書けば宜しいでしょうか
END内に何て書けば宜しいでしょうか
219デフォルトの名無しさん
2008/11/18(火) 12:43:59 >>215
BEGIN{FS=","}
function term_check(term, lower_term) # lower_term は局所変数
{
lower_term=tolower(term)
if(lower_term ~ /[bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][aiueo]/) return 1
return 0
}
{
if(term_check($1) && term_check($3)) print
}
パターン繰り返しって {3} とかでいけるはずなんだが
書き方知らないのでコピペしたw
BEGIN{FS=","}
function term_check(term, lower_term) # lower_term は局所変数
{
lower_term=tolower(term)
if(lower_term ~ /[bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][aiueo]/) return 1
return 0
}
{
if(term_check($1) && term_check($3)) print
}
パターン繰り返しって {3} とかでいけるはずなんだが
書き方知らないのでコピペしたw
220デフォルトの名無しさん
2008/11/18(火) 12:47:37221デフォルトの名無しさん
2008/11/18(火) 13:53:22 >>218
1行ずつバッファリングして、次の行の入力で前の行を出力すれば最後の行は消えてなくなる。
awk 'NR > 2 {print buffer;} NR > 1 {buffer = $0;}'
1行ずつバッファリングして、次の行の入力で前の行を出力すれば最後の行は消えてなくなる。
awk 'NR > 2 {print buffer;} NR > 1 {buffer = $0;}'
222デフォルトの名無しさん
2008/11/18(火) 14:20:29 >>215
gawkなら
awk -F "," -v r="[bcdfghj-np-tv-z]{3}[aiueo]" --posix '$1 ~ r && $3 ~ r'
$1と$3どちらか一方にあればいいなら&&を||に変えてね
gawkなら
awk -F "," -v r="[bcdfghj-np-tv-z]{3}[aiueo]" --posix '$1 ~ r && $3 ~ r'
$1と$3どちらか一方にあればいいなら&&を||に変えてね
223デフォルトの名無しさん
2008/11/18(火) 16:29:37 >>219
助かりました!
助かりました!
224びぎなぁ
2008/11/18(火) 16:46:03 出来ました ありがとうございます
225デフォルトの名無しさん
2008/11/19(水) 23:48:41 込み入ってて整理できないので教えてください。
・対象のテキストは2行目がない(1行目しかない)かつ
・1行目はひらがなカタカナ漢字で15文字以内
という条件を書くのって、次のようにしたのですが、うまくヒットしません。
どう書けばいいでしょう?
NR==2 && length($0) == 0 && NR==1 && /[ぁ-んァ-ヶ亜-腕]{1,15}/
・対象のテキストは2行目がない(1行目しかない)かつ
・1行目はひらがなカタカナ漢字で15文字以内
という条件を書くのって、次のようにしたのですが、うまくヒットしません。
どう書けばいいでしょう?
NR==2 && length($0) == 0 && NR==1 && /[ぁ-んァ-ヶ亜-腕]{1,15}/
226デフォルトの名無しさん
2008/11/19(水) 23:53:31 >>225
NR == 2 && NR == 1じゃ、絶対成立しないだろ。
NR == 2 && NR == 1じゃ、絶対成立しないだろ。
227デフォルトの名無しさん
2008/11/19(水) 23:54:54 awkは行を1行ずつ処理するから、事前にトータル行数を知ることはできない。
トータル行数が1行であることを保証したいなら、ENDブロックで処理するしかない。
トータル行数が1行であることを保証したいなら、ENDブロックで処理するしかない。
228デフォルトの名無しさん
2008/11/20(木) 00:22:37 >事前にトータル行数を知ることはできない
BEGIN部で数えれば?
BEGIN部で数えれば?
229デフォルトの名無しさん
2008/11/20(木) 00:28:19 >>228
どうやって? 対象がファイルである保証があるならwcでも呼べばいいけどそれならawkでやる必要さえないよね。
どうやって? 対象がファイルである保証があるならwcでも呼べばいいけどそれならawkでやる必要さえないよね。
230デフォルトの名無しさん
2008/11/20(木) 03:49:07 { a = $0 }
END { if (NR == 1 && a ~ /re/) print a }
とか?
END { if (NR == 1 && a ~ /re/) print a }
とか?
231デフォルトの名無しさん
2008/11/20(木) 23:58:06 どなたか、任意ビット幅の2の補数HEXをDECに変換するプログラムを書いてもらえませぬか?
232デフォルトの名無しさん
2008/11/22(土) 12:02:58 仕様が不明確なところがあるし、なによりなんでawkで?
233デフォルトの名無しさん
2008/11/26(水) 22:53:51 >>232
ここがawkスレだからでしょ。
ここがawkスレだからでしょ。
234デフォルトの名無しさん
2008/11/29(土) 03:05:38 >>232
考えるな。感じろw
考えるな。感じろw
235デフォルトの名無しさん
2008/12/12(金) 07:21:00 「あなたは何故awkでやろうとするのですか?」
「そこにawkがあるから」
「そこにawkがあるから」
236デフォルトの名無しさん
2008/12/13(土) 04:23:45 awkからsystem()でgrepとかsedとか呼んだりする癖が付いている
シェルスクリプトにする方がむしろ違和感
シェルスクリプトにする方がむしろ違和感
237デフォルトの名無しさん
2008/12/13(土) 23:56:31 おいおい、grepやsedぐらい呼び出さずにawkでやろうぜ。
238デフォルトの名無しさん
2008/12/16(火) 00:29:26 grepやsedはパイプでつなげて使うものじゃないの?(^^;
239デフォルトの名無しさん
2009/01/10(土) 22:10:41 gawk 3.1.4 mb のwindows版のEXEファイルが欲しい…
240デフォルトの名無しさん
2009/01/11(日) 00:38:51 なんでそんな古いバージョンが欲しいの?
241デフォルトの名無しさん
2009/01/11(日) 12:16:04 >なんでそんな古いバージョンが欲しいの?
lengthとかsubstrで、「j」付き文字列関数があるからです。
3.1.5以降だと、同じスクリプトファイル内で、バイト単位処理と
キャラクター単位処理の混在が難儀なのです。
lengthとかsubstrで、「j」付き文字列関数があるからです。
3.1.5以降だと、同じスクリプトファイル内で、バイト単位処理と
キャラクター単位処理の混在が難儀なのです。
242240
2009/01/11(日) 15:01:36 3.1.5で文字の扱いが変わったのはその通りだけど、3.1.4のWindows版て
jlengthやらあったっけ?
なかったと思うんだけど。
jlengthやらあったっけ?
なかったと思うんだけど。
243デフォルトの名無しさん
2009/01/11(日) 15:48:22 >なかったと思うんだけど。
えっ。3.1.4以前のはバイト単位オンリーって事ですか?
…それでも2バイト換算で扱えばいいから、まだマシかも。
j付きが追加されていたけど、動作変更に伴って廃止された…
と思っていました。
記憶にあるのは、どなたかの独自拡張別Verだったのか…?
えっ。3.1.4以前のはバイト単位オンリーって事ですか?
…それでも2バイト換算で扱えばいいから、まだマシかも。
j付きが追加されていたけど、動作変更に伴って廃止された…
と思っていました。
記憶にあるのは、どなたかの独自拡張別Verだったのか…?
244240
2009/01/11(日) 17:54:21 > えっ。3.1.4以前のはバイト単位オンリーって事ですか? ちゃう。
jなんとかがあったのは、
2.11ベースのjgawkと2.15ベースのjgawk
2.15ベースのとgawk+mb
3.0.xベースのgawk+mb
で、3.1.xベースのにはなかったという話だったと思う。
それぞれやってる人が違う。
jなんとかがあったのは、
2.11ベースのjgawkと2.15ベースのjgawk
2.15ベースのとgawk+mb
3.0.xベースのgawk+mb
で、3.1.xベースのにはなかったという話だったと思う。
それぞれやってる人が違う。
245デフォルトの名無しさん
2009/01/11(日) 19:05:17 >3.1.xベースのにはなかったという話だったと思う。
そうですか…。
gawk 3.1.4 mb のwindows版のEXEファイルが欲しい…
ではなくて、
3.0.xベースのgawk+mb のwindows版のEXEファイルが欲しい…
という事になる訳ですが…無理っぽい。
あっても関数や組込変数が減少…その前に16bitDOS版ONLYの予感…。
諦めます。240さん、どうもでした。
そうですか…。
gawk 3.1.4 mb のwindows版のEXEファイルが欲しい…
ではなくて、
3.0.xベースのgawk+mb のwindows版のEXEファイルが欲しい…
という事になる訳ですが…無理っぽい。
あっても関数や組込変数が減少…その前に16bitDOS版ONLYの予感…。
諦めます。240さん、どうもでした。
246デフォルトの名無しさん
2009/01/11(日) 19:50:26 >>245
http://www.hinadori.atnifty.com/~wills/
にあるよ。3.0.6のやつ。
DOS版だけじゃなくてWin32版もある。
3.0.6→3.1.xで増えた機能でも使ってんの?
http://www.hinadori.atnifty.com/~wills/
にあるよ。3.0.6のやつ。
DOS版だけじゃなくてWin32版もある。
3.0.6→3.1.xで増えた機能でも使ってんの?
247デフォルトの名無しさん
2009/01/11(日) 22:30:39 >あるよ。3.0.6のやつ。
おお。 ありがとうございます。
>3.0.6→3.1.xで増えた機能でも使ってんの?
いつ何が増えたのかよく把握していないんですが、
gensubとかmktimeとかswitch-caseとか…ありますかね。
まあ、代替手段はあるので試してみます。どうもです。
おお。 ありがとうございます。
>3.0.6→3.1.xで増えた機能でも使ってんの?
いつ何が増えたのかよく把握していないんですが、
gensubとかmktimeとかswitch-caseとか…ありますかね。
まあ、代替手段はあるので試してみます。どうもです。
248デフォルトの名無しさん
2009/02/23(月) 08:11:12 awkで、組み合わせの全てを作る、という事はできるのでしょうか?
いわゆるnCrの、個数ではなくて、中身を知りたいという事なのですが・・・。
(mawkを使っています)
いわゆるnCrの、個数ではなくて、中身を知りたいという事なのですが・・・。
(mawkを使っています)
249デフォルトの名無しさん
2009/02/24(火) 18:18:34 >>248
できます
できます
250sage
2009/03/04(水) 15:23:19 248です。
なんとかできました。249さんどうもです。
なんとかできました。249さんどうもです。
251デフォルトの名無しさん
2009/03/04(水) 15:24:16 sage間違えた…
252デフォルトの名無しさん
2009/03/23(月) 11:47:59 int(0.5005*10000)が5004になるのはなぜですか。
253デフォルトの名無しさん
2009/03/23(月) 12:41:00 丸め誤差でしょう。
切り捨て前に0.5足すとか工夫してみては如何でしょうか。
詳しくは、IEEEと丸め誤差辺りのキーワードで検索のこと。
切り捨て前に0.5足すとか工夫してみては如何でしょうか。
詳しくは、IEEEと丸め誤差辺りのキーワードで検索のこと。
254デフォルトの名無しさん
2009/03/23(月) 19:57:34 >253
ありがとう
ありがとう
255デフォルトの名無しさん
2009/04/13(月) 21:36:16 gawkで掲示板作りたいんですけど、
gawkが使える無料鯖どこかにありませんか?
gawkが使える無料鯖どこかにありませんか?
256デフォルトの名無しさん
2009/04/13(月) 21:58:14 Linuxが入ってるレンタル鯖なら入ってるんじゃないかなぁ?
レンタル鯖板できいてみたら。
さくらのFreeBSDはFreeBSDのawk(!=gawk)だった。
レンタル鯖板できいてみたら。
さくらのFreeBSDはFreeBSDのawk(!=gawk)だった。
257デフォルトの名無しさん
2009/04/13(月) 22:07:10 >>256
さくらはgawkですか。
Windowsじゃないレンタル鯖ならawkが使えても良さそうですけど、
無料ではなかなか見つからないんですよね。
perl,ruby,phpは多いんですけどねぇ。。
さくらはgawkですか。
Windowsじゃないレンタル鯖ならawkが使えても良さそうですけど、
無料ではなかなか見つからないんですよね。
perl,ruby,phpは多いんですけどねぇ。。
258257
2009/04/13(月) 22:14:30 失礼。
さくらはgawkじゃないawkですか。
さくらはgawkじゃないawkですか。
259デフォルトの名無しさん
2009/04/18(土) 13:07:13 わらうw
ttp://awk.info/?doc/dsl/awkplusplus.html
object_variable = class_name.new[(optional parameters)]
object_variable.method_name(parameters)
object_variable.delete
ttp://awk.info/?doc/dsl/awkplusplus.html
object_variable = class_name.new[(optional parameters)]
object_variable.method_name(parameters)
object_variable.delete
260デフォルトの名無しさん
2009/04/18(土) 13:30:10 >>259
同じくウケた
awkは永続的に使っていて,C-->C++-->Javaと乗り継いできたが,awkはこれらコンパイラ言語を使う上で
良い学習材料になってきたと思い感謝している(もちろん未だにscriptのawkをawkで書いている).
唯一awkで勉強できなかったのがOOPだったから,学習材料としてのawkがこういう方向に活路を見いだすのは
良いことかもしれない.ただし実用に向けて考えてみると,個人的にはOOPが本領を発揮するのは頭の中でalgorithmを
把握しきれなくなる程度に大きなシステムを組み上げる場合なので,果たしてそれをawkで書くかといわれると….
同じくウケた
awkは永続的に使っていて,C-->C++-->Javaと乗り継いできたが,awkはこれらコンパイラ言語を使う上で
良い学習材料になってきたと思い感謝している(もちろん未だにscriptのawkをawkで書いている).
唯一awkで勉強できなかったのがOOPだったから,学習材料としてのawkがこういう方向に活路を見いだすのは
良いことかもしれない.ただし実用に向けて考えてみると,個人的にはOOPが本領を発揮するのは頭の中でalgorithmを
把握しきれなくなる程度に大きなシステムを組み上げる場合なので,果たしてそれをawkで書くかといわれると….
261260
2009/04/18(土) 13:57:19 s/algorithm/データ構造/
262デフォルトの名無しさん
2009/05/09(土) 23:49:39 最近rubyの勉強始めたんだが、
「rubyがあればAWKいらね」とは思えん。
逆にAWKの便利さを再認識した。
やっぱり、簡単なテキスト処理は
AWKでやったほうが簡単だ。
「rubyがあればAWKいらね」とは思えん。
逆にAWKの便利さを再認識した。
やっぱり、簡単なテキスト処理は
AWKでやったほうが簡単だ。
263デフォルトの名無しさん
2009/05/09(土) 23:58:09 各行に対して処理って場合はawkが良いね
264デフォルトの名無しさん
2009/05/10(日) 00:37:15 rubyはオブジェクト指向を強制されるから小回りがきかん
265デフォルトの名無しさん
2009/05/10(日) 01:20:35 JavaScriptが動く HTML実験部屋
ttp://homepage2.nifty.com/tomoarai/java/exper.html
ttp://homepage2.nifty.com/tomoarai/java/exper.html
266デフォルトの名無しさん
2009/05/14(木) 08:38:05 jawkの話題が全然出ないね。
使ってる人少ないの?
使ってる人少ないの?
267デフォルトの名無しさん
2009/05/19(火) 23:16:20 >>266
さくっと1行で済むのが気に入ってる俺には無用だな
さくっと1行で済むのが気に入ってる俺には無用だな
268デフォルトの名無しさん
2009/06/01(月) 15:22:34 >>266
Jア(オ)ーク、プラグアウッ!
Jア(オ)ーク、プラグアウッ!
269デフォルトの名無しさん
2009/06/08(月) 01:31:39 ttp://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_167
Geocoding - 住所から緯度経度を検索 だって。何これおもろい。
Geocoding - 住所から緯度経度を検索 だって。何これおもろい。
270デフォルトの名無しさん
2009/06/21(日) 16:39:12 {if(miso<$1){printf($1)}} miso=30
を実行すると$1が1桁の数字のときにうまくいかないんですけどなぜ?
を実行すると$1が1桁の数字のときにうまくいかないんですけどなぜ?
271デフォルトの名無しさん
2009/06/21(日) 19:43:04 文字列で比較されてるんじゃね?
miso<$1-0
でやったらどう?
miso<$1-0
でやったらどう?
272デフォルトの名無しさん
2009/06/21(日) 21:34:56273デフォルトの名無しさん
2009/06/21(日) 22:04:19274デフォルトの名無しさん
2009/06/21(日) 22:23:40 >>273
$1が4のときに出てほしくないのに出てしまうんです...
$1が4のときに出てほしくないのに出てしまうんです...
275デフォルトの名無しさん
2009/06/21(日) 22:31:41276デフォルトの名無しさん
2009/06/21(日) 22:46:46277デフォルトの名無しさん
2009/06/21(日) 22:54:47278デフォルトの名無しさん
2009/06/22(月) 00:38:26 文字列比較されてるなら一桁のときに上手くいかないというより
二桁のときだけ上手くいくという感じなのかね。
WindowsXPのコマンドプロンプトでgawk(3.1.5)使って下記を試してみたけど
その現象再現できなかった。
gawk "{if(miso<$1){printf($1)}}" miso=30
二桁のときだけ上手くいくという感じなのかね。
WindowsXPのコマンドプロンプトでgawk(3.1.5)使って下記を試してみたけど
その現象再現できなかった。
gawk "{if(miso<$1){printf($1)}}" miso=30
279デフォルトの名無しさん
2009/06/22(月) 07:43:07 $awk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
compiled limits:
max NF 32767
sprintf buffer 2040
$seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
うまく動いているようだが。
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
compiled limits:
max NF 32767
sprintf buffer 2040
$seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
うまく動いているようだが。
280デフォルトの名無しさん
2009/06/22(月) 18:20:09 >>279をマネさせてもらった
$ awk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
$ seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
$ awk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
$ seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
281デフォルトの名無しさん
2009/06/22(月) 19:59:10 miso=30って-v付けなくていけるんだ。しらんかった。
2009/06/23(火) 01:02:55
gawkは
コマンドラインで指定されたファイル名が var=val という形式ならば、それは変数への代入であると解釈されます。変数 var は値 val に設定されます (これは、すべての BEGIN ブロックを実行したあとに行われます)。
やっぱりもれの XPコマンドプロンプト環境でも
>gawk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
>seq 1 40 | gawk "{if(miso<$1) print}" miso=30
31
32
33
34
35
36
37
38
39
40
って期待通りの動きだYO!
コマンドラインで指定されたファイル名が var=val という形式ならば、それは変数への代入であると解釈されます。変数 var は値 val に設定されます (これは、すべての BEGIN ブロックを実行したあとに行われます)。
やっぱりもれの XPコマンドプロンプト環境でも
>gawk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
>seq 1 40 | gawk "{if(miso<$1) print}" miso=30
31
32
33
34
35
36
37
38
39
40
って期待通りの動きだYO!
283デフォルトの名無しさん
2009/06/24(水) 00:39:07 固定長で改行なしのファイル(6MB超)を処理することになり、
他のソフトで「改行ありの固定長」にしてから、awkで処理していたのですが…
データファイルによく出てくる文字をとりあえずRSに見立てて読み込み
→RSに指定した文字を連接
→固定長の1行分より長かったらその部分を切り出し
していくと「改行ありの固定長」、できちゃいました。
RSに指定した文字がしばらく出てこなければ変数パンクしちゃうし、大分危なっかしいの
ですが、とりあえずawkでできたのが少しうれしい。
他のソフトで「改行ありの固定長」にしてから、awkで処理していたのですが…
データファイルによく出てくる文字をとりあえずRSに見立てて読み込み
→RSに指定した文字を連接
→固定長の1行分より長かったらその部分を切り出し
していくと「改行ありの固定長」、できちゃいました。
RSに指定した文字がしばらく出てこなければ変数パンクしちゃうし、大分危なっかしいの
ですが、とりあえずawkでできたのが少しうれしい。
284デフォルトの名無しさん
2009/06/24(水) 03:25:12 改行ありの固定長をawkで読んだのなら
substr($0, start, length) でばらせよw
substr($0, start, length) でばらせよw
285デフォルトの名無しさん
2009/06/26(金) 11:29:46286デフォルトの名無しさん
2009/06/30(火) 01:27:46 fold とか?
287デフォルトの名無しさん
2009/07/13(月) 09:52:52 正規表現で空白で区切られたテキストをHTMLでいうtableにしたいです。
例)
10進 2進 8進
000 000 000
001 001 001
002 010 002
003 011 003
↓↓↓↓↓↓↓
<table>
<tr><th>10進</th> <th>2進</th> <th>8進</th></tr>
<tr><td>000</td> <td>000</td> <td>000</td></tr>
<tr><td>001</td> <td>001</td> <td>001</td></tr>
<tr><td>002</td> <td>010</td> <td>002</td></tr>
<tr><td>003</td> <td>011</td> <td>003</td></tr>
</table>
例)
10進 2進 8進
000 000 000
001 001 001
002 010 002
003 011 003
↓↓↓↓↓↓↓
<table>
<tr><th>10進</th> <th>2進</th> <th>8進</th></tr>
<tr><td>000</td> <td>000</td> <td>000</td></tr>
<tr><td>001</td> <td>001</td> <td>001</td></tr>
<tr><td>002</td> <td>010</td> <td>002</td></tr>
<tr><td>003</td> <td>011</td> <td>003</td></tr>
</table>
288デフォルトの名無しさん
2009/07/13(月) 12:07:49289デフォルトの名無しさん
2009/07/13(月) 16:12:21 正規表現使ってタグを切り替えたいのかな?
290hogehoge
2009/07/17(金) 16:37:34291デフォルトの名無しさん
2009/07/17(金) 18:35:54 今までawk '{print $3}'程度しか使って無かったが、最近これを読んでawkを見直した。
http://www.eecs.harvard.edu/cs152/lectures/CS152-Lecture_14-Kernighan.pdf
http://www.eecs.harvard.edu/cs152/lectures/CS152-Lecture_14-Kernighan.pdf
292デフォルトの名無しさん
2009/07/26(日) 15:10:31 ttp://www.kt.rim.or.jp/~kbk/gawk-3.1/
ここのgawkで>>17のサンプルを試したが動かなかった。
gawk: test.awk:4: 致命的: 入出力用の双方向ソケット `/inet/tcp/0/www.yahoo.com/80' が開けません (No such file or directory)。
ここのgawkで>>17のサンプルを試したが動かなかった。
gawk: test.awk:4: 致命的: 入出力用の双方向ソケット `/inet/tcp/0/www.yahoo.com/80' が開けません (No such file or directory)。
293hogehoge
2009/07/27(月) 11:13:15 それはそこのサイトの人に言えよ
294デフォルトの名無しさん
2009/07/28(火) 00:11:42 いつのまにかgawk 3.1.7が出てた。
295デフォルトの名無しさん
2009/07/30(木) 11:45:58 Ruby 勉強中だけど AWK のほうが楽しいぜ(´・ω・`)
296デフォルトの名無しさん
2009/08/06(木) 10:22:37 7月7日→[[7月7日|07月07日]]
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月3日]]
12月16日→[[12月16日|12月16日]]
と置き換えたいです。
perlならわりと簡単なのですが、awkで簡単にいきますか?
自分がawkのことを勉強不足だからかもしれませんけど…。
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月3日]]
12月16日→[[12月16日|12月16日]]
と置き換えたいです。
perlならわりと簡単なのですが、awkで簡単にいきますか?
自分がawkのことを勉強不足だからかもしれませんけど…。
297デフォルトの名無しさん
2009/08/06(木) 10:24:13 ↑間違いました。
7月7日→[[7月7日|07月07日]]
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月03日]]
12月16日→[[12月16日|12月16日]]
7月7日→[[7月7日|07月07日]]
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月03日]]
12月16日→[[12月16日|12月16日]]
298デフォルトの名無しさん
2009/08/06(木) 11:03:17 例がよくわからないんだけど,数字1桁の部分を2桁にしたいってこと?
299デフォルトの名無しさん
2009/08/06(木) 11:13:12 {
gsub(/月|日/," ");
printf("%02d月%02d日\n",$1,$2);
}
とか.
フィールドセパレータがデフォルト(半角スペース)の場合ね.
gsub(/月|日/," ");
printf("%02d月%02d日\n",$1,$2);
}
とか.
フィールドセパレータがデフォルト(半角スペース)の場合ね.
300デフォルトの名無しさん
2009/08/06(木) 11:15:10 >296
Perlで簡単に書けるなら、一旦Perlコード晒してくれるか?
どうも仕様がよく解らんのだ…
Perlで簡単に書けるなら、一旦Perlコード晒してくれるか?
どうも仕様がよく解らんのだ…
301デフォルトの名無しさん
2009/08/06(木) 11:54:28 print gensub(/0([0-9])([0-9])/, "\\1\\2", "g", gensub(/([0-9]+)/, "0\\1", "g",
$1))
我ながら汚ねぇなぁ(´・ω・`)
>>299の方がいいな
$1))
我ながら汚ねぇなぁ(´・ω・`)
>>299の方がいいな
302デフォルトの名無しさん
2009/08/06(木) 12:27:22 >>298,300 置換しないで変えたいとこだけ出力するならこういう意味です。
#!/usr/bin/perl
while(1){
$line = <STDIN>;
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/){
$month = $1; $day = $2;
if($month >= 10) {
if($day >=10){
print "$& -> [[$month月$day日]]";
}
else {
print "$& -> [[$month月$day日|$month月0$day]]";
}
}
else{
if($day >=10){
print "$& -> [[$month月$day日|0$month月$day]]";
}
else{
print "$& -> [[$month月$day日|0$month月0$day]]";
}
}
}
}
1月1日 - ユーロ導入10周年。
1月1日 -> [[1月1日|01月01]]
12月31日 - ニューヨークのマンハッタン橋開通100周年。
12月31日 -> [[12月31日]]
8月21日 - ハワイ州州制50周年。
8月21日 -> [[8月21日|08月21]]
10月1日 - パラオ独立15周年。
10月1日 -> [[10月1日|10月01]]
#!/usr/bin/perl
while(1){
$line = <STDIN>;
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/){
$month = $1; $day = $2;
if($month >= 10) {
if($day >=10){
print "$& -> [[$month月$day日]]";
}
else {
print "$& -> [[$month月$day日|$month月0$day]]";
}
}
else{
if($day >=10){
print "$& -> [[$month月$day日|0$month月$day]]";
}
else{
print "$& -> [[$month月$day日|0$month月0$day]]";
}
}
}
}
1月1日 - ユーロ導入10周年。
1月1日 -> [[1月1日|01月01]]
12月31日 - ニューヨークのマンハッタン橋開通100周年。
12月31日 -> [[12月31日]]
8月21日 - ハワイ州州制50周年。
8月21日 -> [[8月21日|08月21]]
10月1日 - パラオ独立15周年。
10月1日 -> [[10月1日|10月01]]
303デフォルトの名無しさん
2009/08/06(木) 14:16:23 なんか素直にPerlでやったほうが楽そうだなあ、それ。
ちなみに、そのコードじゃ無限ループするぞ。
#!/usr/bin/perl
while($line = <STDIN>) {
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/) {
$month = $1; $day = $2;
if($month < 10 || $day < 10) {
printf "%s -> [[%d月%d日|%02d月%02d]]\n", $&, $month, $day, $month, $day;
}
else {
print "$& -> [[$month月$day日]]\n";
}
}
}
ちなみに、そのコードじゃ無限ループするぞ。
#!/usr/bin/perl
while($line = <STDIN>) {
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/) {
$month = $1; $day = $2;
if($month < 10 || $day < 10) {
printf "%s -> [[%d月%d日|%02d月%02d]]\n", $&, $month, $day, $month, $day;
}
else {
print "$& -> [[$month月$day日]]\n";
}
}
}
304デフォルトの名無しさん
2009/08/06(木) 14:44:03 だめだ…コードの意味は分かるが,仕様が良く分からん.
305デフォルトの名無しさん
2009/08/06(木) 14:47:14 7月7日
という文字列を
[[7月7日|07月07日]]
と置き換える、ってことでしょ。
なんで分からんかなぁ。そっちのが分からん。
という文字列を
[[7月7日|07月07日]]
と置き換える、ってことでしょ。
なんで分からんかなぁ。そっちのが分からん。
306デフォルトの名無しさん
2009/08/06(木) 14:53:30 入力が07月07日だったら,
出力は[[07月07日|07月07日]]になるよね?これはOK?
そもそも,そういう入力は起こりえないの?
出力は[[07月07日|07月07日]]になるよね?これはOK?
そもそも,そういう入力は起こりえないの?
>>305
そんな感じです。
目的を言っていないので、何がやりたいのかよくわからないのだと思います。
早い話、Wikiの記法を使ってリンクを張りたいのです。
0をくわえて桁を調整している理由は
文字列としてソートして正しく昇順に並ぶようにするためです。例えばWikipediaなら
7月7日のときは、[[7月7日|07月07日]]とすることで
リンクはhttp://ja.wikipedia.org/wiki/7月7日
表示される文字列は 07月07日
となります。
これをソートできるテーブルの要素にします。参考までに
http://ja.wikipedia.org/wiki/Help:%E8%A1%A8%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9#.E5.86.8D.E6.95.B4.E5.88.97.E5.8F.AF.E8.83.BD.E3.81.AA.E8.A1.A8
この処理はawkでも可能なことは可能だったんですが、無知なせいか
おそろしく不格好になりました。
>>306
それ思いました。できれば
07月07日->[[7月7日|07月07日]]
のように処理したいです。
そんな感じです。
目的を言っていないので、何がやりたいのかよくわからないのだと思います。
早い話、Wikiの記法を使ってリンクを張りたいのです。
0をくわえて桁を調整している理由は
文字列としてソートして正しく昇順に並ぶようにするためです。例えばWikipediaなら
7月7日のときは、[[7月7日|07月07日]]とすることで
リンクはhttp://ja.wikipedia.org/wiki/7月7日
表示される文字列は 07月07日
となります。
これをソートできるテーブルの要素にします。参考までに
http://ja.wikipedia.org/wiki/Help:%E8%A1%A8%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9#.E5.86.8D.E6.95.B4.E5.88.97.E5.8F.AF.E8.83.BD.E3.81.AA.E8.A1.A8
この処理はawkでも可能なことは可能だったんですが、無知なせいか
おそろしく不格好になりました。
>>306
それ思いました。できれば
07月07日->[[7月7日|07月07日]]
のように処理したいです。
308デフォルトの名無しさん
2009/08/06(木) 18:26:07 >>303
それです。そういう意味です。
それです。そういう意味です。
309デフォルトの名無しさん
2009/08/06(木) 21:17:06 # gawk による match 関数の拡張を使っている.
# 一行に複数回現れた場合は無視.
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", $0, a[2], a[1], a[2], a[1]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", $0, a[2], a[1]));
}
}
print $0;
}
# 一行に複数回現れた場合は無視.
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", $0, a[2], a[1], a[2], a[1]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", $0, a[2], a[1]));
}
}
print $0;
}
310309
2009/08/06(木) 21:21:15 # 訂正.
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", a[1], a[2], a[1], a[2]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", a[1], a[2]));
}
}
print $0;
}
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", a[1], a[2], a[1], a[2]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", a[1], a[2]));
}
}
print $0;
}
311デフォルトの名無しさん
2009/08/06(木) 23:59:03 >>310 完璧です。今度からこれを使います有難うございました。
$ cat test.txt
1月1日 #m月d日
01月1日 #0m月d日
1月01日 #m月0d日
01月01日 #0m月0d日
2月10日 #m月dd日
02月10日 #0m月dd日
11月3日 #mm月d日
11月03日 #mm月0d日
12月16日 #mm月dd日
$ awk -f test.awk test.txt
[[1月1日|01月01日]] #m月d日
[[1月1日|01月01日]] #0m月d日
[[1月1日|01月01日]] #m月0d日
[[1月1日|01月01日]] #0m月0d日
[[2月10日|02月10日]] #m月dd日
[[2月10日|02月10日]] #0m月dd日
[[11月3日|11月03日]] #mm月d日
[[11月3日|11月03日]] #mm月0d日
[[12月16日]] #mm月dd日
$ cat test.txt
1月1日 #m月d日
01月1日 #0m月d日
1月01日 #m月0d日
01月01日 #0m月0d日
2月10日 #m月dd日
02月10日 #0m月dd日
11月3日 #mm月d日
11月03日 #mm月0d日
12月16日 #mm月dd日
$ awk -f test.awk test.txt
[[1月1日|01月01日]] #m月d日
[[1月1日|01月01日]] #0m月d日
[[1月1日|01月01日]] #m月0d日
[[1月1日|01月01日]] #0m月0d日
[[2月10日|02月10日]] #m月dd日
[[2月10日|02月10日]] #0m月dd日
[[11月3日|11月03日]] #mm月d日
[[11月3日|11月03日]] #mm月0d日
[[12月16日]] #mm月dd日
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】嵐、解散を発表!解散前にラストツアーも開催予定 [Ailuropoda melanoleuca★]
- 【速報】嵐、解散を発表!解散前にラストツアーも開催予定 ★2 [Ailuropoda melanoleuca★]
- 嵐、来年春に行うツアーをもって活動終了 [少考さん★]
- 【新型コロナ】今もコロナ後遺症と闘う19歳 移動、食事、排泄、入浴など手を借りなければ… 周囲の無理解、支援受けられぬ例も [ぐれ★]
- イギリス、反移民を掲げる右派ポピュリスト政党が1600議席中677議席の大躍進―英地方議会選 [お断り★]
- 【京都】赤いポルシェが市営バスと正面衝突…バス乗客の女性が負傷 ポルシェを運転の24歳男を逮捕 酒気帯び運転などの容疑 [シャチ★]
- 🏡ビビンバー🖐🏿😲🖐🏿ハウス🏡
- 💩🏡クソ濡れのお🏡💩
- 駐英日本大使、炎上 イギリス人「ギャー、クランペットにバターつけずジャムを塗っているうううう」 石破茂の任命責任 [175344491]
- 【悲報】大阪万博、閉園までまだ2時間以上あるのにガラガラ、帰宅してる客すら少ない🥹 [616817505]
- 【石破速報】神奈川県警、ストーカー事件でまた嘘をついてたのが判明 [931948549]
- 【悲報】AIエンジニア「親の介護のために地方(広島?)に戻ったら、ITの仕事が家電量販店のスマホ販売員しかなかった…終わりだよ… [257926174]