X



トップページLinux
270コメント86KB
awk ファンクラブ
0001login:Penguin
垢版 |
2008/07/07(月) 20:45:18ID:wYmB5VwU
おーくについて語りましょう
0002login:Penguin
垢版 |
2008/07/07(月) 20:52:18ID:7N4CeYxI
awkは言わねえ、たった一行・・・
0003login:Penguin
垢版 |
2008/07/07(月) 20:55:08ID:64cKGfca
オークは便利だオーク
0004login:Penguin
垢版 |
2008/07/07(月) 21:21:04ID:Bjq85S2V
sedファンクラブからきました。
0005login:Penguin
垢版 |
2008/07/07(月) 21:35:44ID:rSMtL5cT
ls -ltr | awk '{print $8}'
0006login:Penguin
垢版 |
2008/07/07(月) 21:50:35ID:XFLIMsgD
aho
wainberg
kernihan
0007login:Penguin
垢版 |
2008/07/07(月) 22:39:16ID:/5MnC3tB
awkでなんでもやるのって年がバレそうだなあ。ちょっと下の世代だとperlだろうし。
0008login:Penguin
垢版 |
2008/07/08(火) 00:19:21ID:9/fi698j
ttp://text.world.coocan.jp/TSNET/tsc/tsc_1.1.003.pdf
0009login:Penguin
垢版 |
2008/07/08(火) 01:19:20ID:yAMbUEpf
しばらくしたら,perlでなんでもやるのって年がバレそうだなあ。ちょっと下の世代だとpythonだろうし。ってなるんだろうな
0010login:Penguin
垢版 |
2008/07/08(火) 10:32:21ID:YEHCkTi1
下の世代はpythonよりrubyじゃないか?

自分の場合、全部シェルスクリプトだけどw
0011login:Penguin
垢版 |
2008/07/08(火) 12:50:38ID:6brAoz3h
perl->pythonときてawkの便利さに気付いた。
0012login:Penguin
垢版 |
2008/07/08(火) 16:47:52ID:TJw2Mlna
awk, perlユーザだが次はpythonとやらをいじってみるかね
0013login:Penguin
垢版 |
2008/07/09(水) 19:51:11ID:r1P6Mjit
awkを256倍はみなさん持ってます?ここがすべての始まりだったなあ
0014login:Penguin
垢版 |
2008/07/09(水) 19:52:45ID:+TY8Gpg6
オライリーのsed&awkがはじまりだったなあ・・・
んでもってx68kで遊んでいたw
0015login:Penguin
垢版 |
2008/07/09(水) 19:55:00ID:0dhBqlXX
俺はrubyとpython両方使ってる。
rubyはワンライナー〜十数行のスクリプト。
pythonは数十行〜数百行のスクリプト。
0016login:Penguin
垢版 |
2008/07/09(水) 20:03:27ID:Glf+LFW9
そんな昔にawkとかと出会えた人が羨ましい
0017login:Penguin
垢版 |
2008/07/09(水) 20:09:52ID:r1P6Mjit
awk gawk jgawk やっぱり魅力はデータなめさせた時のスピード感
0018login:Penguin
垢版 |
2008/07/09(水) 21:59:50ID:2WqtvhnN
適当なデータをSQLにして流すときとかに使ってる。
BEGIN/ENDのおかげでトランザクション使うのも簡単。
0019login:Penguin
垢版 |
2008/07/09(水) 23:40:46ID:ro47ZQt4
>>14
「プログラミング言語AWK」が絶版になると聞いてあわてて確保したが、すぐ再版された。
0020login:Penguin
垢版 |
2008/07/20(日) 12:21:50ID:j9YcHbCn
awk がなくなると困る・・・・・
Perlで$3 を表示しる!とかどーすんよ

awk '{print $3}'
0021login:Penguin
垢版 |
2008/07/20(日) 12:31:10ID:/rTvaqQG
オークについて、おおくは語らねぇ
0022login:Penguin
垢版 |
2008/07/20(日) 13:45:48ID:ysRQGfiQ
>>20
perl -ane 'print $F[2], "\n"'でいいんじゃね?
0023login:Penguin
垢版 |
2008/07/20(日) 22:40:15ID:3uxKU7IE
>>22
なんかこう、Perlってスクリプトにエレガントさを感じないんだよな。つぎはぎが多い
というか。

awkの場合、cに近いスタイルでありながらパターンマッチングとか連想配列の実装が
エレガントだからコードを見ててきれいに感じる。
0024login:Penguin
垢版 |
2008/07/20(日) 23:32:42ID:j9YcHbCn
>>22 マジレス dd ちょっとやってみる(ヲイ
0025login:Penguin
垢版 |
2008/07/21(月) 04:31:14ID:RBm9osMs
perl の -n は各行に対しての処理、-e はスクリプトをファイルでなくその場でワンライナー書く為のものだが
-a オプションはやっぱり awk の名に由来するのかねぇ
0026login:Penguin
垢版 |
2008/07/21(月) 10:22:28ID:m3jpUYR9
>>25
autosplit modeってusageに書いてあるじゃん。
0027login:Penguin
垢版 |
2008/07/22(火) 11:02:10ID:oOCbPgMu
>26
いや名目上はそうだけどさ。
スクリプトでauto〜なんて言い出したらキリが無いワケじゃん。
ぶっちゃけ -n だって自動ループと言っちゃえばそうだし。

そこで -s や -p みたいな名前じゃなくて
わざわざ -a にしたのは、やっぱ awk の名を意識したからなのかな、と
思ったんだよ。
0028login:Penguin
垢版 |
2008/08/17(日) 18:47:40ID:AZ0h4M4q
ruby -ne 'puts split[2]'のほうが楽、と思ったけど
空行とかでの扱い考えると
ruby -ne 'puts split[2] || ""'
になるのか。やっぱawkが楽だな。
0029login:Penguin
垢版 |
2008/12/03(水) 10:54:22ID:QXJz0hBL
sedのスレとかあったので、思わず「なんでawkを使わない?」って突っ込んでしまったけど、
実はおれも長らくsedからawkへ行けなかった。田中さん(緑のSerrow)が月刊asciiに書いた
記事を読んで使えるようになったのだった。

いまではperlも使うが、やはりawkが楽だなぁ。16進→10進変換の関数作ったり、
バイナリデータ読むためのコードをCで作ったりして無理やり使ってたころが
懐かしい。
0030login:Penguin
垢版 |
2008/12/03(水) 23:47:03ID:Thw8Gp7O
2年くらい前からLinuxを本格的に使い始めたけど
awk(gawk)とsedには特に力を入れて勉強してる
gawkは機能が洗練されて美しいし直感的で使いやすい
リファレンスもとてもしっかりしてる
0031login:Penguin
垢版 |
2008/12/09(火) 16:01:43ID:NHdcSNGH
おれが一番よく使うのは連想配列。

gawk '{w[$1]++;}END{for(i in w)print i,w[i];}' xxxx.txt | sort

みたいなことを何百回やったことか。
0032login:Penguin
垢版 |
2009/04/21(火) 01:25:03ID:8RfnrYFS
わらうw
ttp://awk.info/?doc/dsl/awkplusplus.html

object_variable = class_name.new[(optional parameters)]
object_variable.method_name(parameters)
object_variable.delete
0033login:Penguin
垢版 |
2009/04/21(火) 17:02:32ID:CHFddJcj
みなさん教えて下さい。

一行毎に読み込み@<と@>で囲まれた部分を
ランダムなアルファベット10文字に置換し、
元々@<@>に囲まれた部分の文字列と置換したランダムな文字列の対応を
別ファイルに書き出し

っていうのをやりたいです。
awkとsedでできるの?

pythonで書くべき?
0034login:Penguin
垢版 |
2009/04/21(火) 18:09:12ID:68A2ZTzG
できるっちゃーできるが、おすすめはしない。

BEGIN {
output = "hoge.txt"
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
len = length(chars)
srand()
}
{
if(match($0, /@<.*@>/)){
t = substr($0, RSTART+2, RLENGTH-4)
if(!(t in m)) m[t] = rndstr(10)
$0 = substr($0, 1, RSTART+1) m[t] substr($0, RSTART+RLENGTH-2)
}
print
}
END {
for(i in m) print i, m[i] > output
}
function rndstr(n, s){
while(n--) s = s substr(chars, int(rand()*len)+1, 1)
return s
}
0035login:Penguin
垢版 |
2009/05/08(金) 21:56:17ID:uniCaTc9
まじぽかのUMAちゃんは最高にかわいいNE!
0036login:Penguin
垢版 |
2009/07/08(水) 17:12:37ID:nwzD2hQJ
printfと$ / $がうまく両立できない・・・
文型向け授業でわざわざlinux使わせるなよ・・・
0037login:Penguin
垢版 |
2009/07/14(火) 15:14:45ID:OYRFUc74
やっぱAWKいいよねー
「プログラミング言語AWK」は買い逃してたんで再販速攻で買ったよ。
Excelなんてやってられねーっつーの
0038login:Penguin
垢版 |
2009/07/14(火) 15:45:04ID:ZhPQ90qn
>>37
Excelのvlookupみたいなリレーショナルな事がやりたい場合ってどーしてる?
0039login:Penguin
垢版 |
2009/07/16(木) 23:17:47ID:up+KJ4E4
連想配列でいいんちゃうん?
0040login:Penguin
垢版 |
2009/07/18(土) 04:58:19ID:p/gu39Bx
いやさ、複数のシートから引っ張ってくるような感じで、複数のテキストファイルを対象にしたい時。
0041login:Penguin
垢版 |
2009/07/18(土) 15:26:29ID:VCKoFo8D
そんなん普通に複数ファイル処理すればいいやん。
0042login:Penguin
垢版 |
2009/07/18(土) 16:20:59ID:p/gu39Bx
>>41
> そんなん普通に複数ファイル処理すればいいやん。

「普通に」の所kwsk
0043login:Penguin
垢版 |
2009/07/18(土) 21:51:54ID:VCKoFo8D
getlineすりゃえーやろ
0044login:Penguin
垢版 |
2009/07/19(日) 04:55:45ID:TalGZSOR
awk初心者です。質問させてください。
awkでアクセスカウンタを作ろうと思い、
以下のようなスクリプトを書いたのですが、
最後のhtmlへの出力(表示)の方法がわかりません。
どうしたらいいのでしょうか?
004544
垢版 |
2009/07/19(日) 04:57:30ID:TalGZSOR
BEGIN{
#プロセスロック
lock()

#カウント数の読み込み
while (getline < count.dat > 0){
before_count = $1;
}
close(count.dat);

#カウントを1進める
new_count = before_count + 1;

#数字の置換を行う
sub(before_count, new_count, $1);

#プロセスロック解除
unlock()
}
004644
垢版 |
2009/07/19(日) 04:58:33ID:TalGZSOR
print "Context-Type: text/text";
print "\r";

END{
#表示テンプレートの読み込み
while (getline < count.txt > 0){
txt_file[++i] = $0;
}
close(count.txt);

#あらかじめセットしてあるテンプレート上の文字列を置換
gsub("<!--#count.cgi--!>", new_count, $0);

print $0;
}
0047login:Penguin
垢版 |
2009/07/19(日) 11:16:35ID:xa/YVpR4
>>43
getline知らなかったわ。
難しそうだな・・・
0048login:Penguin
垢版 |
2009/07/19(日) 15:13:23ID:Ge8Nt7Pt
>>44
SSIの仕組みは理解できていますか。
ttp://httpd.apache.org/docs/2.0/ja/howto/ssi.html
0049hogehoge
垢版 |
2009/07/21(火) 14:50:51ID:PUGBjRE4
getline は毎回リファレンス見に行ってるなぁ
頭が劣化しとるわー
0050login:Penguin
垢版 |
2009/08/01(土) 15:31:08ID:z6H8O5Sr
こんなものが落ちてたw
ttp://mitya.pp.ru/chamberlen/assorted/OReilly%20-%20Sed%20&%20Awk%202nd%20Edition.pdf
0051login:Penguin
垢版 |
2009/08/15(土) 20:33:21ID:7GY0b2Yy
Mac OS X Leopard 10.5.8でjgawkを使いたいのです。
ターミナルでawk '{print $0}' filenameですと日本語が悲しいです。
お使いのみなさん、使用法等教えて下さい。
0054正月前
垢版 |
2009/12/29(火) 22:19:45ID:UAwxD9+5
awk初心者です。
awkにはperlのjoinみたいの関数ありますか?
perl:
print join(":",$_);
0057正月前
垢版 |
2009/12/31(木) 16:45:37ID:z/pUNj8p
重複を削除するBASHスクリプトに、perlの部分はawkの連想配列で書き換えたいんですが、splitした後の処理方法が分かりません
教えて頂ければ幸いです。

-----------------------------
hoge='a:b:c:d:a:b:c:d:a'
echo -n $hoge | perl -F: -ane 'chop;foreach(@F){$s{$_}++ or push(@b,$_)}print join(":",@b)'
-----------------------------
0058login:Penguin
垢版 |
2010/01/05(火) 11:48:18ID:iQ1ypvd/
素人なりですけど
echo -n $hoge | awk 'BEGIN{OFS=":"}{n=split($0,a,":");m=1;for(i=1;i<=n;i++){if(!(a[i]in b)){$m=a[i];b[$m]++;m++}}print}'
0059login:Penguin
垢版 |
2010/01/05(火) 12:34:43ID:APedkSZb
echo -n $hoge | awk 'a[$0]++<1{printf(NR>1?RS:_)$0}' RS=:
0060login:Penguin
垢版 |
2010/01/05(火) 12:50:31ID:APedkSZb
a[$0]++<1 じゃなくて
!a[$0]++ とした方が1バイト短くなるな

って、そういう趣旨じゃないか
0062正月前
垢版 |
2010/01/11(月) 22:20:00ID:jx5sxsA2
>>58,59,60
ご回答、誠に有難うございました!
まだawkの部分理解してないけど、期待通りの動作が確認できました!
0063login:Penguin
垢版 |
2010/03/16(火) 14:08:38ID:hRXCRI1I
Linuxじゃないんですが、Gawk on Windowsだと、
 gawk '{print $1;}' data.txt
ていうのは、クォーテーションはダブルにしないといけないんですね。。。
0064login:Penguin
垢版 |
2010/03/16(火) 14:27:11ID:OV90ZKd/
うん、引数文字列をどう解釈するかは awk じゃなくてシェルだから。
cmd.exe の仕様の問題であって、awk の側では対応しようにもできない。
0065login:Penguin
垢版 |
2010/05/14(金) 13:36:36ID:XjQaHos9
BEGIN {

printf "256倍のコードが提供されてる\n"
printf "ttp://books.ascii.jp にアクセス\n"
printf "本には4756101623なんてのがついてるけど、本の通りに入れるとnot found\n"

}

END {
print "昔と本の内容が変わってるみたいだな"
}
0066login:Penguin
垢版 |
2010/05/14(金) 21:49:15ID:KfNsslph
END {
  print "まだ始まってもねーよっ!"
}

BEGIN {
  printf "・・・ごめ・・・\n"
}

0067login:Penguin
垢版 |
2010/07/22(木) 10:04:21ID:PFu3TuWN
{
if ($0 == "aka") print "red"
else print "blue"
}
の最も変態的な記法を教えて下さい。
0069login:Penguin
垢版 |
2010/07/28(水) 10:04:53ID:ZsEEtYoL
END {
system("echo " + $0 + " | perl -ne 'if(/"aka"/){print \"red\";}else{print \"blue\";}'")
}
0070初心者
垢版 |
2010/11/04(木) 22:16:05ID:UUOsCvwd
awkでシェルのPATH変数をマッチさせるときにスラッシュ//を使わない方法を教えていただけませんか?
perlだと##で行けますが
0072初心者
垢版 |
2010/11/05(金) 06:33:50ID:HLS9uc8i
ごめんなさい!
マルチがだめとは知りませんでした。
0073login:Penguin
垢版 |
2011/02/03(木) 07:43:56ID:S25iv8qF
アルフレッド・V・恵方
0075login:Penguin
垢版 |
2011/02/11(金) 21:58:36ID:W6G44msP
awkって今時オブジェクト指向もサポートしてねぇのか。
だせぇ・・・

とか思ってたらこんなのもあるんだな。
http://awk.info/?doc/dsl/awkplusplus.html
0076login:Penguin
垢版 |
2011/05/24(火) 19:21:38.77ID:iwctpm7O
awkの処理についてアドバイスを下さい。
スペースで区切られたテキストファイルがあります。

例(フィールド数も文字数も全部異なります)

abc efg hij http://www.example.com/index.html xyz
123 http://www.example.org/ she good love look good
4edi http://www.example.net/test/test.html

こんな感じのテキストファイルからURLだけを抽出したい
場合、どう言った処理を行うと良いでしょうか?

printなどは使えそうにないし頭を抱えています。
是非お助け下さい。
0077login:Penguin
垢版 |
2011/05/24(火) 19:44:33.96ID:Z14Fpx2c
>>76
{for(i=0;i<=NF;i++)if($i ~ /^http:\/\/.+$/)print $i}
0078login:Penguin
垢版 |
2011/05/24(火) 19:52:09.13ID:WxByEtFQ
自分は
match($0, /http:\/\/[^ ]+/, f)
を使う気がする。
0079login:Penguin
垢版 |
2011/05/24(火) 20:22:38.00ID:jzDVjDvh
#!/bin/sh
cat 入力ファイル | tr ' \t' '\n' | awk '/^http:/'

…まで書きかけて、あれ、これawkじゃなくてgrepで良くね、と思ってしまった俺
0080login:Penguin
垢版 |
2011/05/24(火) 20:49:07.88ID:WxByEtFQ
/bin/shでもやはり自分は
expr 文字列 : '.*\(http:\/\/[^ ]*\).*'
を使う気がする。
0081login:Penguin
垢版 |
2011/05/24(火) 23:22:37.43ID:Rb7jhN0u
うちは>>77の条件を index($i, "http:") == 1 で書くだろうなぁ
でも、処理内容がそれだけなら sed -n 's/^.*\(http:[^ ]*\).*$/\1/p' だなぁ
避けられるなら正規表現は避けたほうが速いんじゃないかと思ってる
008276
垢版 |
2011/05/25(水) 00:02:32.97ID:bOPlpFb7
まだどうしてそういう結果になるのか…が全然解らないのですが
一つ一つひもといて自分のものにしていきたいです。

みなさん本当に色々ありがとうございます。
0083login:Penguin
垢版 |
2011/05/25(水) 02:29:57.15ID:RCLD3Ghq
こういうのもpythonで書くようになってしまった俺は駄目なやつですか
0084login:Penguin
垢版 |
2011/05/25(水) 03:14:46.21ID:zyb8WUrO
流石にPythonはこういうサクッとしたテキスト処理には冗長すぎないか?
awk以外でならperl、さもなくばrubyあたりまでが俺は限度だなあ
0085login:Penguin
垢版 |
2011/05/27(金) 01:08:18.13ID:4uJpaTLS
BEGIN{ FS="http://"; }{ split($2, item, / /); print FS item[1]; }

とか
0086login:Penguin
垢版 |
2011/06/02(木) 03:19:02.91ID:LRv8LU2q
入力からランダムで1行表示する
awk '{ l[i++]=$0 }; END{ srand(); print l[int(i*rand())] }'

シェルスクリプトの方が短いか?
0087login:Penguin
垢版 |
2011/06/02(木) 09:37:16.89ID:Z7QDCEkg
こう書くと1行しかメモリに保存しないので入力行が多くとも平気です

BEGIN { srand() }
rand() * NR < 1 { x = $0 }
END { print x }
0088login:Penguin
垢版 |
2011/06/02(木) 20:42:21.58ID:ud/fx+Py
>>87
それだと行数が多いと後半の表示が少なくなっちゃう
0089login:Penguin
垢版 |
2011/06/02(木) 21:02:20.14ID:Z7QDCEkg
>>88
2行のときは
1/1の確率で1行目が選ばれる
→1/2%の確率で2行目が選ばれる

3行のときは
1/1の確率で1行目が選ばれる
→1/2の確率で2行目が選ばれる(この時点で1行目、2行目の確率はともに1/2)
→1/3の確率で3行目が選ばれる(2/3の確率で1or2行目が残り両者1/2なので全て1/3)

のように、基本的に確率は等しいはずですが……
浮動小数点演算の精度が問題になるような行数の話でしょうか?
009086
垢版 |
2011/06/02(木) 22:17:12.88ID:jvZfUiPL
>>87
お、これはすごい!考えたなー。ぱっと思いついた奴は、天才だ。こんな風になりたいわ。

> 浮動小数点演算の精度が問題になるような行数の話でしょうか?
これは初め見たとき思ったけど、それが問題になるなら、
私の書いた方法でもメモリが逼迫してまずい気がします。
ただ、精度やrand()の性能で、実際に統計取ったら88の言うようになるのかもしれません。

あとは、rand()が1を返す実装はないよね?gawkのマニュアル読んで書くのだけど、
関数の説明が簡単に書き過ぎていて、ちょっと不安。
0091login:Penguin
垢版 |
2011/06/02(木) 22:37:43.51ID:jvZfUiPL
不要な部分を全部削って87の方が2バイト短いか。
mawkだとsrand()を省けるから、もっと短い。エレガント!

それにしても、4ヶ月ぶりに上がったんだ。ほんと人居ない。
0092login:Penguin
垢版 |
2011/06/02(木) 22:45:23.28ID:twwaY/QA
ワタスは監視してますよ。
0094login:Penguin
垢版 |
2011/06/03(金) 00:49:49.88ID:cydHNqeK
じゃあ、暫く書く
0095login:Penguin
垢版 |
2011/06/03(金) 01:07:11.81ID:cydHNqeK
空行を削除する
awk 1 RS=

sedだと、
sed /^$/d
かな?同じ9文字か。
0096login:Penguin
垢版 |
2011/06/03(金) 09:20:27.26ID:5n/j2qmP
>>89
rand()を全行で実行しているから、
1行目には2行目以降が x を上書きする確率が加わり、
2行目には3行目以降が x を上書きする確率が加わり、
ってことになるんじゃないのかな。

全4行の場合
1行目が表示される確率 1/1*1/2*1/3*1/4
2行目が表示される確率 1/2*1/3*1/4
3行目が表示される確率 1/3*1/4
4行目が表示される確率 1/4
って感じで、最終行が表示される確率が一番大きい気かします。
rand()をBEGINの中に入れてしまえば全部同じだけど。
0097login:Penguin
垢版 |
2011/06/03(金) 09:45:41.12ID:TAmMFFcQ
>>96
1/1*1/2*1/3*1/4 + 1/2*1/3*1/4 + 1/3*1/4 + 1/4 = 5/12 (≠ 1)
なので、それが誤りなのは、すぐに分かるはずですが……
それらの確率を足したら1になっていないといけません
ここは高校数学の確率統計のお話をするスレではありませんが、
以下のように考えたらお分かりでしょうか?

1行目が表示される確率は 1/1*1/2*2/3*3/4 = 1/4
(1行目が選ばれる確率 * 2行目が選ばれない確率 * 3行目が選ばれない確率 * 4行目が選ばれない確率)
2行目が表示される確率は 1/2*2/3*3/4 = 1/4
(2行目が選ばれる確率 * 3行目が選ばれない確率 * 4行目が選ばれない確率)
3行目が表示される確率は 1/3*3/4 = 1/4
(3行目が選ばれる確率 * 4行目が選ばれない確率)
4行目が表示される確率は 1/4
(4行目が選ばれる確率)
0098login:Penguin
垢版 |
2011/06/03(金) 12:56:40.94ID:yy0ffQt3
>>97
そうでした。電車の中で気が付きました。
x が上書きされる確率じゃなくて、上書きされない確率を掛けないといけませんでした。
納得。
0099login:Penguin
垢版 |
2011/06/03(金) 22:11:19.49ID:cydHNqeK
なんか利点が無いように見えるので、sedじゃなくawkを使う理由を探してみた。

tar xf linux-2.6.39.1.tar.bz2 --wildcards '*.c' -O >src.txt
time cat src.txt |awk 1 RS= >/dev/null
real 0m3.172s
user 0m2.786s
sys 0m0.757s

time cat src.txt |sed /^$/d >/dev/null
real 0m32.503s
user 0m31.465s
sys 0m0.882s

※参考
time cat src.txt |cat >/dev/null
real 0m0.606s
user 0m0.036s
sys 0m0.586s

おー。sedより、ずっとはやーい
やったね、awk!
0100login:Penguin
垢版 |
2011/06/03(金) 22:26:22.52ID:lSuFEE/Z
うむ。grep よりも awk の方が速かった記憶がある。
0101login:Penguin
垢版 |
2011/06/04(土) 12:42:54.20ID:HzZByxDX
複数のtimeコマンドの出力から平均を求める
awk -Fm '{ a[$1]+=$2; a[0,$1]++ }; END{ for(i in a) if(i~/^[rus]/) printf "%sm%.3fs\n",i,a[i]/a[0,i] }'

昨日の時間計測のために書いた。
いろいろ問題あり。これ以上短くかけなかった、残念だわ。

sedがすっごい遅いので全部メモリに読み込んで処理させてみた。
time cat src.txt |sed -n '1x;1!H;${x;s/\n\n\+/\n/gp}' >/dev/null
real 0m24.515s
user 0m18.584s
sys 0m2.005s
# ちなみに、昨日のも含めて3回試した結果を平均した

…やっぱ遅い。GNU sedが悪いの?スレ的に満足な結果だけど。
便利で速くてシンプルなのに、あまり使われない紹介されない、消え行くawk、カワイソス
0102login:Penguin
垢版 |
2011/06/04(土) 13:21:18.28ID:El9DLlK0
フィールドを抜き出すワンライナーはやっぱawkでしょ
perl -pae'$_=$F[8].$/'
ruby -nae'puts$F[8]'
awk 'print$9'
0103login:Penguin
垢版 |
2011/06/05(日) 00:51:57.16ID:kp3qNbsC
>>95の表記初めて見た
このスレの住民にはこれくらい当たり前なのか…
0104login:Penguin
垢版 |
2011/06/05(日) 05:45:10.75ID:jNueNt7Q
それってどういう構造なんだ?
1番目の引数である「1」は「パターンは常に成り立つ、アクションは指定しない(=レコードを加工せずに出力)」というawkコードだろうけど
その次の引数って入力ファイルになるはずじゃ?
0105login:Penguin
垢版 |
2011/06/05(日) 07:57:57.27ID:k4Gl3aKk
わかんねー。なんでこれをコマンドプロンプトに打ち込んで、うまくいくのか。
gawk 1 RS= testfile.txt
0106login:Penguin
垢版 |
2011/06/05(日) 08:10:41.12ID:SucWQMoo
RSが空だとRS=\n+として解釈されるんじゃまいか
0107login:Penguin
垢版 |
2011/06/05(日) 08:50:42.42ID:jNueNt7Q
だとしても、何故にRS=\n+がコードとして実行されるの?
コードは1で終わってね?
0108login:Penguin
垢版 |
2011/06/05(日) 09:34:08.07ID:jNueNt7Q
自己解決、assignment optionsなんて仕様があったのか
0109login:Penguin
垢版 |
2011/06/05(日) 09:55:54.81ID:Tq0aYVo2
おー、いっぱい居るね!まだまだやれるぞ、awk!

一応説明すると、プログラム自体は>>104の解釈の通りです。

また、RS=""なら、RS="\n\n+"とほぼ同じです。
違いは、RS=""はファイルの先頭に改行が続くとき、それを無視します。

ついでに、POSIXではRSに2文字以上設定すると、結果は不定とされています。
gawkでは、正規表現を使える拡張がされていますけど。

引数ですが、ここに代入文を書くとBEGINの後に処理されます。
まあ、ああ書いたのは-vオプションを使うと3文字コマンドが増えるからなんですが、
こういう変数の設定方法もあるということで。
0110login:Penguin
垢版 |
2011/06/05(日) 10:44:14.22ID:3GXVErWF
awk /./

の7文字だけでOK
RSは初期値が入ってるんだから
0111login:Penguin
垢版 |
2011/06/05(日) 14:48:51.10ID:jNueNt7Q
そうか、sed /^$/d って grep . で良かったんだな
0112login:Penguin
垢版 |
2011/06/05(日) 19:30:13.18ID:Tq0aYVo2
>>109
書き忘れ。
RS=""のとき、ファイルの末尾の改行も無視する。
あと、FSが"\n"に設定されているように振舞う。
元々複数行を一気に処理したい場合に使うことを想定してたのだろう。

>>110
ああ、すごい、これは短い!頭柔らかいねえ、スマートだわ。
夢の中でも考えたのに…無能過ぎワラタ

>>111
grep最強伝説はっじまっ…らないぞ。同じ方法で時間計測したら2時間半たっても終わらない。
grep捨ててawkを使おう!
0113login:Penguin
垢版 |
2011/06/05(日) 20:13:50.57ID:k4Gl3aKk
awkはじまったなw
0114login:Penguin
垢版 |
2011/06/07(火) 23:28:39.30ID:pixJYa/G
改行をWindows向けに置き換える
awk '{ print $0 "\r" }'

こっちの方が速くて短いか。
awk 1 ORS='\r\n'
0115login:Penguin
垢版 |
2011/06/08(水) 00:28:22.25ID:AGBbsX8a
速くて短いし、そっちのがコードと意味が一致するかと
0116login:Penguin
垢版 |
2011/06/08(水) 01:01:03.76ID:48mfCmU6
そっかー、分かり易さは、上の方だと思ったのですよ。
下のは、awkがどう動くかを知ってないと気持ち悪い感じ。
101みたいなsedスクリプトを、初めて見たときのような。
0117login:Penguin
垢版 |
2011/06/08(水) 06:42:33.45ID:3juXEiES
上だと\n\rになっちゃうけど
CRLFの\r\nとは違うから
Windowsでは認識しないのでは?
0118login:Penguin
垢版 |
2011/06/08(水) 12:16:04.61ID:AGBbsX8a
>>117
いや、上のコードは\rが先に出力されるからあってるよ、改行じゃなくて普通の可読文字でためしてみ
0119login:Penguin
垢版 |
2011/06/09(木) 23:01:35.59ID:b4gs0WW2
Windows向けの改行をUnix向けに置き換える
awk 1 RS=\\r ORS=

改行弄ったら戻したいよね。一文字多い別解。
awk 'sub(/\r/,"")'

>>117
$0にRSは含まれない。print文での出力のときにORSが付けられる。
だから、114のような書き方ができるのです。

え?素直にnkfとかtr使うべきだって?ごめんちゃい。
tr -d \\r
nkf -d
短いねえ…そして速そう…
0120login:Penguin
垢版 |
2011/06/12(日) 23:20:31.21ID:8N8UbY4v
正規表現にマッチした部分を全て置換し、その行を表示する
awk 'gsub(/foo/,"bar")'

sedで書くとこうか。
sed -n 's/foo/bar/gp'
こういう処理はsedの方が楽に書けるのかな、うーん。

>>119
awk 'sub(/\r/,"")+1'
下はこの方が良かった。うっかりファイルの内容を消してしまいそうだ。
0121login:Penguin
垢版 |
2011/06/13(月) 19:11:34.42ID:NkVjy07h
だいたい置換はsedで書いたほうが素直に読みやすいと思う
逆にそれ以外のツールでもスクリプトでもなく、awkで書きたくなるのはフィールドを使うものかな
0122login:Penguin
垢版 |
2011/06/13(月) 22:57:31.80ID:0YRj9/YK
いや、しかし最近目から鱗落ちまくりです。沢山の書き込みに感謝感謝。
0123login:Penguin
垢版 |
2011/06/14(火) 21:28:05.61ID:ODOs6IfG
中身の検索はgrep
置換はsedとかtr
結合はcatとかpaste
計算はexprとか場合によりwc
多少組み合わせる必要があるならshでシェルスクリプトwhile、for、read、shiftみたいな

大抵やりたいことに対応するコマンドがある。awkでプログラム風に書くのは人を選ぶのかもね。
このスレが太古の昔に沈んでしまったのも、そのせいか。
実際、プログラム板にもあるけど、あちらはそこそこ書き込みがある。

Linuxも既にGUI全盛、バッチ処理もGUIでという流れか、シェルスクリプト総合スレもなくなってしまったし。
板全体がほとんど動作報告中心になって、Linuxやシステム全体のコアな部分、プログラミングの話題を
話す場所が消えてしまったような気がする。気がするだけ。
0124login:Penguin
垢版 |
2011/06/14(火) 23:04:41.82ID:CILjaNiq
シェルスクリプトはUnix板で話せばいいしな
Linuxでメジャーなシェルは大概BSDとかでも使えるし
0125login:Penguin
垢版 |
2011/06/15(水) 21:26:33.76ID:QLTzRiMx
HTMLファイルからタイトル(title要素の持つ文字列)を取得する
awk '/<title>/{ b=1 }; b{ s=s $0 RS }; /<\/title>/{ gsub(/.*<title>|<\/title>.*/,"",s); print s; exit }'

分かりやすさと効率を無視、短さを優先した別解。
awk '{ s=t=s $0 RS }; gsub(/.*<title>|<\/title>.*/,"",t)>1{ print t; exit }'

どっかのスレにて、出遅れ、荒れ気味なので。
改行も保存してるけど、必要ないならRSを除けばいい。
perlの無いシステムでもawkはある!はず。

いつの間にかUnix板のシェルスクリプトスレまで無くなってやがる…
0126login:Penguin
垢版 |
2011/06/15(水) 22:50:13.28ID:QFQ0PbYI
ホントだ、何でだろ
0127login:Penguin
垢版 |
2011/06/16(木) 00:11:48.62ID:oqM9OV4C
980超えたからだな
0128login:Penguin
垢版 |
2011/06/16(木) 00:29:05.98ID:G4IIl/GQ
ああ、そうだったのかー。でもまだ次スレ建ってないね。
スレ建てた事無いから分からないけど、最近建て難いようだし、そのせいかな。

112で諦めたgrepで空行を削除する処理の時間計測の結果。
time cat src.txt |grep . >/dev/null

real 342m52.646s
user 337m34.249s
sys 0m7.174s

grep -V
GNU grep 2.6.3

寝て起きたら終わっていた。余程grepを必要とするときくらいしか、使うべきじゃない。
# 一つのケースでしかないのだけどね。ただ、これほど遅いとは…
0129login:Penguin
垢版 |
2011/06/16(木) 09:39:38.00ID:iftKRWTE
>>125
それ、xgawkで書くとどんなになるの?
0130login:Penguin
垢版 |
2011/06/16(木) 10:18:36.69ID:x2P5GNsY
>>129
gawk '$0=gensub("</?title>", "", "g", RT)' RS='<title>.*</title>' IGNORECASE=1
0131login:Penguin
垢版 |
2011/06/19(日) 18:13:12.21ID:O1oYVV5e
>>128
待てよ…awkでもパターン検索だけなら遜色なく書けて
かつawkのが速いんじゃ、grepの存在価値って…

ああ、複数ファイルからの検索があるか
つーても、これもawkでFILENAMEとFNR明示したら書けちゃうか…
0132login:Penguin
垢版 |
2011/06/20(月) 00:28:57.29ID:rO0fE487
>>131
まあgrepで済む物は記述が簡単なわけで。
0133login:Penguin
垢版 |
2011/07/01(金) 01:20:48.84ID:NsJJwAAV
xgawkは使ってないなぁ。使ってる鳥には無いし。XHTMLが対象ならもっと短く書けるのだろうか。

>>130
おー!これはクール。
gawkは大文字小文字無視する処理書くの楽だね。流石だ。

>>131
前後の行を表示させたりが楽かも。まあ、滅多にお世話になることないけど…
rm -r *でデータ飛ばしたから、そのサルベージに役立つとは…orz
0134login:Penguin
垢版 |
2011/07/01(金) 02:00:56.40ID:NsJJwAAV
コマンド`grep -C N regex'を真似する
awk 'BEGIN{ L=N; b=L+1; n=L+2; i=j=0; s=2 };
    /regex/{ if (L&&s==1) print "--"; while (i!=j) { print a[i++]; if (i==b) i=0 } n=s=0 };
    n>L{ a[j++]=$0; if (j==b) j=0; if (i==j) { i++; if (i==b) i=0; if (!s) s++ } next }; n++<=L'

書けた!!データ飛ばすは、アク禁に巻き込まれるは散々だった。よく見たら凄い遅レスだ…
データのサルベージに使ったgrep -Cを書いてみた。流石にワンライナーとは言い難い。
効率はもう少し良くできそうだけど、これ以上短くするのは無理だった。実力が足りない;_;

あまりに読み辛いので、pastebinに整形版を置いておきます。
ttp://pastebin.com/PJ2VfqN4
0135login:Penguin
垢版 |
2011/07/01(金) 23:56:01.08ID:NsJJwAAV
時間計測の結果を追記。

time grep -C 500 'public class\|jar cf\|javac\|\.java' <strings_a.txt >/dev/null
real 0m2.112s
user 0m1.528s
sys 0m0.311s

time awk 'BEGIN{ L=500;(略)}; /public class|jar cf|javac|\.java/{(略)}; n++<=L' <strings_a.txt >/dev/null
real 1m20.089s
user 1m15.426s
sys 0m0.389s

一回計測。約50倍くらい遅いか。ネイティブとスクリプトだから、まあこうなる、と言ったところだと思う。
短い処理なら有利な場合もあるんだろうけど。
0136login:Penguin
垢版 |
2011/07/04(月) 00:51:55.26ID:Zh/tRXtG
指定された正規表現を含むファイルの名前を表示する
awk 'f!=FILENAME && /regex/{ print f=FILENAME }'

gawkならこう書ける。
awk '/regex/{ print FILENAME; nextfile }'

>>131に近い。FNRも使って検索結果を表示するスクリプトも、あまり複雑にはならなそう。
下の方が速いけど、mawkだとnextfileをサポートしてなかった。
grep -lと同じ結果で、指定する正規表現によってawkの方が速く動くこともあるよ。
0139login:Penguin
垢版 |
2011/07/07(木) 02:54:29.78ID:bHkfWT8R
md5sumコマンドの出力から重複するMD5チェックサムを持つファイルを列挙する
awk '{ i=++a[$1,0]; a[$1,i]=$0 }; END{ for (i in a) if (!k[split(i,k,SUBSEP)] && a[i]>1) for (j=1; j<=a[i]; j++) print a[k[1],j] }'

まだ短く書けそうかな?
あるディレクトリ以下を調べるなら、こんな感じでMD5チェックサムを計算する。
find sda6.photorec -type f -exec md5sum '{}' +
この出力をパイプか何かで食わせればいい。

gawkの4.0が出たか。いろんな亜種を使う機会があるから、なかなか依存したプログラムは書けないね。
よく使うのはgawkとmawkだけど、皆何をよく使ってるのだろう?使用者が少ないから余計に気になる。

デバッガって使いやすい?いまだにprintで表示してやってるなぁ。
0140login:Penguin
垢版 |
2011/07/07(木) 11:14:47.64ID:WpiH6Omg
gdbやpythonデバッガやらと似てるのでとっつきやすくはあると思う。
0141login:Penguin
垢版 |
2011/07/08(金) 00:37:18.45ID:gfdD9pMC
fileコマンドの出力からテキストファイル(表示可能なファイル)だけ取得する
awk '{ q=$1; $1="" }; /text/{ print q }' -F:

FSは-Fオプションを使って1文字短く書く。使い方は次のようにパイプでつなぐ。
find sda6.photorec -type f -exec file '{}' + |awk '{ q="'\''" $1 "'\''"; $1="" }; /text/{ print q }' -F: |xargs -i cp -v "{}" sda6.photorec.text/

xargsに渡すためクォートしてる。ワンラインにシングルクォーテーション入ると書きづらい。
でも、こういう処理はawkが一番楽だね。

>>140
へー、それは良いね!って思ったけど自分が書くような短いスクリプトには不要かも…
今、awkでデバッガが重宝するような長いスクリプトって、どれほど書かれてるんだろう?
0142login:Penguin
垢版 |
2011/07/08(金) 17:00:09.91ID:Iqd7ejAo
gawkだけでurlエンコードできますか?
0143login:Penguin
垢版 |
2011/07/08(金) 17:42:07.69ID:baIcylwh
>>142
BEGIN{for(;i<256;++i)c[t=sprintf("%c",i)]= i==32?"+":t~/[0-9A-Za-z]/?t:"%"sprintf("%x",i)}
{for(s=i="";i++<length;s=s c[substr($0,i,1)]); print s}

マルチバイト対応してて length() とか substr() とかが
バイト数ではなく文字数を数えて動作するような小賢しい awk だと逆に動かない。
0144login:Penguin
垢版 |
2011/07/08(金) 19:08:55.72ID:gwMiQJC1
Gawk4.0の新オプションはそういう時のためにある訳か。
0145login:Penguin
垢版 |
2011/07/08(金) 19:46:11.33ID:CbA9+OJF
>>141
ファイル名には : も使えるから汎用じゃないね。
あとショートコードを意識してるようなのに不必要なセミコロンとカッコ内側のスペースが
あるのはスタイルとして一貫してないな。
0146login:Penguin
垢版 |
2011/07/08(金) 20:31:15.76ID:bJ65EBT8
昨日はこのスレの3周年だったのです。
0147login:Penguin
垢版 |
2011/07/09(土) 07:11:28.80ID:OcQSMVqG
このスレ七夕に立ってたのか。3周年って言われると、まだ3年かと思ってしまう。
3年前といえばLLが盛り上がってた頃だから、もう少し前に立ってればここももっと盛り上がっていたかもね。
gawkは新しくなったけど、確実に他のLLに流れてるよなぁ…
0148login:Penguin
垢版 |
2011/07/09(土) 07:34:21.50ID:OcQSMVqG
>>145
どこぞのOSでは使えない文字をわざわざファイル名に使わないよねって思い、楽してます。
ただパスに含まれる可能性はあるので、そういった場合は file -F; のようにして
fileコマンドの使うセパレータを(使われていない)任意の文字に設定して下さい。

スタイルに関しては全くその通りで、自分でも冗長だと思いつつ残しています。以下言い訳…

スペースは読み辛くなると思う所にだけ残すようにしています。また、ここに貼ると、
表示がプロポーショナルフォントになって、幅が狭い文字の隣から一部分コピペする操作をよくミスるため、
そういった幅の狭い文字(}とか;)の後には残しています。
ifやwhileの後、print $1 や "a" b "c" に含まれるものも省略できますが、違和感が物凄いので残しています。

セミコロンは(POSIXの仕様で)必要なものだけを残しているつもりです。
過去の互換性のために省略可能なものは、残すようにしています。
0149login:Penguin
垢版 |
2011/07/09(土) 11:49:25.24ID:Ne909y4H
>>147
他のLLに比べて、Windowsで使われる頻度が滅法低いのも一因かなあと思う
コマンドプロンプトで awk がやれることって、BEGIN{ } に何か書くぐらいしか無いのよね
だったらPerlとかでいいじゃん、って話になっちゃう
0150login:Penguin
垢版 |
2011/07/09(土) 15:37:05.06ID:Q3LPccup
awkオンリーってのがムズイので、Cygwin上でsh他外部コマンドと組み合わせて使う事が多い
0151login:Penguin
垢版 |
2011/07/09(土) 17:09:11.40ID:Ne909y4H
結局awkはプログラミング言語というより「ちょっとややこしいことも出来るUnix系テキストツール」としての性格が強いんだと思う。
0152login:Penguin
垢版 |
2011/07/09(土) 17:38:27.04ID:OcQSMVqG
そうか、Windowsでの使用率は考えたことなかったわ。そっちで今何が流行ってるのかは知らないけど、
GUI扱うライブラリを持つLLが使われてそうだ。こればかりは厳しい。そもそも、ライブラリって概念がないのが避けられてるのかな。
0153login:Penguin
垢版 |
2011/07/09(土) 17:45:48.05ID:Ne909y4H
>>152
いやGUIはほとんどVisualStudio、Java、Delphi辺りで喰われてるよ
その他のGUIツールもあるにはあるんだけど

LLの主な出番は向こうでもテキストフィルタだったりはするんだけど
Windowsにはそもそも組み合わせるような小物のコマンド群が無いから
やりたい処理の1から10まで全部を1個(もしくは一連)のスクリプトで済ませるのが主流

だからたとえLLであっても、1言語で最初から最後までを完結できる大きめの言語が好まれるのよ
awkは単品で使うより、組み合わせで威力を発揮する言語だからか、あまり使われない
0154login:Penguin
垢版 |
2011/07/09(土) 17:49:54.27ID:Ne909y4H
あ、いやテキストフィルタよりもCGIとかのWebでの出番のが多いか?
0155login:Penguin
垢版 |
2011/07/09(土) 18:38:35.83ID:Q3LPccup
cgiでawk使う事って、珍しくないの?
0156login:Penguin
垢版 |
2011/07/09(土) 18:59:11.34ID:wbKjo2Ly
awkでcgiも出来なくもないだろうけど、っていうかそれでblog作ろうとしてた人もいたな
0157login:Penguin
垢版 |
2011/07/09(土) 19:07:48.49ID:OcQSMVqG
>>153
ホント?Delphiなんて懐かしいなぁ。GUIでなく、Webでの利用なら、もはやOSあまり関係ないような気も。よく分からん。

>>155
聞いたことはあるけど、見たことはない程度には珍しいかと。gawkはネットに対応してるから頑張ればサーバにもなれるかな?
0158login:Penguin
垢版 |
2011/07/09(土) 19:58:21.74ID:Ne909y4H
>>157
いやまあDelphiは新規としては瀕死で、過去遺産の保守で使われるのが主だけどね。
0159login:Penguin
垢版 |
2011/07/09(土) 20:14:45.59ID:Q3LPccup
やっぱawkでcgiってマイナーか。しかしblogつーか、CMS作ろうとするのは凄いなw

ちなみにgawkのhttpdって、どっかで見たなあ。
0160login:Penguin
垢版 |
2011/07/09(土) 20:57:21.04ID:CG+O7ik7
httプロトコルでなく、俺プロトコル用サーバならawkスクリプトでやってる。
httpに例えるなら、ファイルか404を返すだけの簡単なやつ。
しかもgawkのソケットでなく、inetdから呼ばれるだけの低機能。
0161login:Penguin
垢版 |
2011/07/10(日) 16:44:29.85ID:nBMv6TVB
私はエンバカになっても応援してるよ!>Delphi

>>160
今更inetdって思ってて、ろくに調べてなかったけど、socatみたいな機能もあるんだね。
ポート監視→サーバ起動って機能しかないと思ってたよ。

これならネット非対応なawkでもhttpdくらい実装できる?…バイナリまともに扱えそうなのはgawkしかねー。
テキストオンリーまでなら何とかできそうだけど、画像も転送できないか。厳しい制限だ。
0162login:Penguin
垢版 |
2011/07/11(月) 00:10:26.11ID:ShNAK0f0
個人的にはawkは今まで通りシェルのお供でいいと思う
perlとかでもそりゃ書けんことは無いが
シェルのお供として使うには微妙に違和感あるんだよな〜
0163login:Penguin
垢版 |
2011/07/14(木) 01:48:17.88ID:I04Pjvnw
>>134
これを使って正規表現によって grep とどれだけ実行速度に差が出るのか計ってみた。
ttp://pastebin.com/bpXZ5pg8

数字だけではよく分からないので、ユーザ時間のグラフを描いた。
ttp://i53.tinypic.com/303a4iv.jpg
赤がawk、青がgrep
こっちじゃないと見れないかも → ttp://tinypic.com/r/303a4iv/7

awk もばらつきがあるけど、grep ほどではない。
どちらも、マッチする可能性が高い正規表現は遅くなる傾向があるのかなぁ?
0164login:Penguin
垢版 |
2011/07/14(木) 23:45:53.76ID:I04Pjvnw
引数で与えられたファイルをメモリに読み込み繰り返し検索する
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)a[n++]=$0;close(f);ARGV=1};{for(i=0;i<n;++i)if(a[i]~$0)print a[i]}'

最近、用途が限られているもの中心だったので使えそうなワンライナーにしてみたよ。きっと。
指摘を受けたので、スペースは削ることにしました。ちっと見づらい?

↓は大文字小文字を無視するもの。こうするとdmesgの出力を何回も検索できる。
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)l[n++]=tolower(a[+n]=$0);close(f);ARGC=1};{for(i=0;i<n;++i)if(l[i]~tolower($0))print a[i]}' <(dmesg)
0165login:Penguin
垢版 |
2011/07/15(金) 08:26:42.31ID:ZNSgasJH
見にくいので、セミコロンで改行して欲しい。
0166login:Penguin
垢版 |
2011/07/16(土) 01:01:45.88ID:bjjWiIZ6
凄く長くなりそう><
0167login:Penguin
垢版 |
2011/07/16(土) 08:37:16.54ID:n6+rd2ar
長過ぎるone-linerを見易く改行するone-linerを書きなさい
0168login:Penguin
垢版 |
2011/07/18(月) 15:25:02.07ID:7hj9vKr7
しまったー!書き込む前にちょろっと書き換えたところがバグってました。mawkで動きません。

>>164の下のスクリプトは次に書き換えてください。
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)a[n++]=$0;close(f);ARGC=1};{for(i=0;i<n;++i)if(tolower(a[i])~tolower($0))print a[i]}'
awkのシーケンスポイントってC言語と同じなのかな…痛いミス。

おまけ。使ってるやつ。エスケープシーケンスを使って見つかった文字列に色を付けた。
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)a[n++]=$0;close(f);ARGC=1};
    {for(i=j=0;i<n;++i)if(k=match(tolower(a[i]),tolower($0)))print C(j=!j)I(I(a[i],C(39),k+RLENGTH),C(31),k);print C()};
    function C(n){return"\033["n"m"};function I(x,y,z){return substr(x,1,z-1)y substr(x,z)}'
パターンごとに改行を入れた。少し見やすいか?

>>164の上のスクリプトに色を付ける機能を追加。ずっと分かりやすいと思う。
awk 'BEGIN{f=ARGV[1];while((getline<f)>0)a[n++]=$0;close(f);ARGC=1};
    {for(i=j=0;i<n;++i){l=a[i];if(sub($0,C(31)"&"C(39),l))print C(j=!j)l}print C()};
    function C(n){return"\033["n"m"}'
subをgsubにするとマッチする全ての文字列に色を付けられるよ。

gawkならgensub使ってもう少し短く書けるかもしれない。IGNORECASE=1で簡単に大文字小文字無視できるし。
0169login:Penguin
垢版 |
2011/08/15(月) 19:41:00.75ID:yTTHvZyj
classは使えるようになりましたか? > gawk4
0170login:Penguin
垢版 |
2011/08/16(火) 15:17:21.28ID:Tuhp+s5y
つ ttp://awk.info/?doc/dsl/awkplusplus.html
0171login:Penguin
垢版 |
2011/08/16(火) 15:27:51.45ID:2FR0TK0E
ちゃんとご自分で読んだものを「つ」されてますか?
0172login:Penguin
垢版 |
2011/08/21(日) 15:15:49.17ID:EL3rN3cw
ふるいけや "かわず とびこむ" みずのおと
といったレコードを、
field[1]=ふるいけや
field[2]=かわず とびこむ
field[3]=みずのおと
number_of_field = 3
とフィールド分割するすっりした方法を教えて下さい。
0173login:Penguin
垢版 |
2011/08/21(日) 16:45:12.36ID:iSpKRH15
" で split すればいい
0174login:Penguin
垢版 |
2011/08/21(日) 18:45:31.99ID:EL3rN3cw
やはり2chでは馬鹿レスしかつかんか。
0175login:Penguin
垢版 |
2011/08/21(日) 18:56:18.08ID:Fst2eXVD
>>172
それ、CSVとかでもよく語られることだけど、意外と面倒なのよ。
例えば「"」自体を文字列に入れたい場合はどうするのか、とか色々決めなきゃならんし。
0176170
垢版 |
2011/08/21(日) 19:12:48.13ID:yoctsNv6
あれ?awkでclass使いたいって事なんでしょ?
ttp://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
>172
素直に区切り文字を変えるしか...

ふるいけや,かわず とびこむ,みずのおと

FS=","
0178172
垢版 |
2011/08/21(日) 22:01:39.45ID:Mb9j323G
自己レスです。
BEGIN { FPAT = "([^" FS "]+)|(\"[^\"]+\")" }
みたいな事をしました。
0179login:Penguin
垢版 |
2011/08/22(月) 10:27:15.81ID:bf5ta6rs
awk にわけわかんな機能を増やすよりも、
RFC4180 互換なフィールド分割オプションを実装すればいいのにといつも思う。
0180login:Penguin
垢版 |
2011/08/22(月) 10:33:38.59ID:uwcmdhh8
馬鹿の巣窟にわざわざ書き込むな馬鹿
0181login:Penguin
垢版 |
2011/08/22(月) 11:11:08.80ID:4smqF+KA
見事に馬鹿の巣窟と化したねえ
0182login:Penguin
垢版 |
2011/11/28(月) 19:46:48.89ID:NIKBR+N1
perl -e 'print $1 if /href="(¥d¥d¥d¥d-¥d¥d¥-¥d¥d)"/'
と同じことを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
>>181
馬鹿じゃないあなたに是非>>182の回答をしてもらおうか。
0184login:Penguin
垢版 |
2011/11/28(月) 21:15:52.48ID:Oo5SGhpX
>>182
perl がわからないから求めるものがよくわからないけれど、こんな感じ?

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
>>182
どの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:6tCpTQmb
gawk4.0なら
awk '{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: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準拠。
レスを投稿する


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