1read 100read
2013年04月Linux121: awk ファンクラブ (204) TOP カテ一覧 スレ一覧 2ch元 削除依頼
RC5 Cracking (377)
mlterm 3 (729)
Linuxで出た被害ってどこで責任とってくれるの? (269)
qmailインストール (267)
■最強のエディター、その名もXZ EDITOR■ (463)
Winで出来なくてLinuxで出来ることを書くスレ (781)

awk ファンクラブ


1 :2008/07/07 〜 最終レス :2013/03/24
おーくについて語りましょう

2 :
awkは言わねえ、たった一行・・・

3 :
オークは便利だオーク

4 :
sedファンクラブからきました。

5 :
ls -ltr | awk '{print $8}'

6 :
aho
wainberg
kernihan

7 :
awkでなんでもやるのって年がバレそうだなあ。ちょっと下の世代だとperlだろうし。

8 :
ttp://text.world.coocan.jp/TSNET/tsc/tsc_1.1.003.pdf

9 :
しばらくしたら,perlでなんでもやるのって年がバレそうだなあ。ちょっと下の世代だとpythonだろうし。ってなるんだろうな

10 :
下の世代はpythonよりrubyじゃないか?
自分の場合、全部シェルスクリプトだけどw

11 :
perl->pythonときてawkの便利さに気付いた。

12 :
awk, perlユーザだが次はpythonとやらをいじってみるかね

13 :
awkを256倍はみなさん持ってます?ここがすべての始まりだったなあ

14 :
オライリーのsed&awkがはじまりだったなあ・・・
んでもってx68kで遊んでいたw

15 :
俺はrubyとpython両方使ってる。
rubyはワンライナー〜十数行のスクリプト。
pythonは数十行〜数百行のスクリプト。

16 :
そんな昔にawkとかと出会えた人が羨ましい

17 :
awk gawk jgawk やっぱり魅力はデータなめさせた時のスピード感

18 :
適当なデータをSQLにして流すときとかに使ってる。
BEGIN/ENDのおかげでトランザクション使うのも簡単。

19 :
>>14
「プログラミング言語AWK」が絶版になると聞いてあわてて確保したが、すぐ再版された。

20 :
awk がなくなると困る・・・・・
Perlで$3 を表示しる!とかどーすんよ
awk '{print $3}'

21 :
オークについて、おおくは語らねぇ

22 :
>>20
perl -ane 'print $F[2], "\n"'でいいんじゃね?

23 :
>>22
なんかこう、Perlってスクリプトにエレガントさを感じないんだよな。つぎはぎが多い
というか。
awkの場合、cに近いスタイルでありながらパターンマッチングとか連想配列の実装が
エレガントだからコードを見ててきれいに感じる。

24 :
>>22 マジレス dd ちょっとやってみる(ヲイ

25 :
perl の -n は各行に対しての処理、-e はスクリプトをファイルでなくその場でワンライナー書く為のものだが
-a オプションはやっぱり awk の名に由来するのかねぇ

26 :
>>25
autosplit modeってusageに書いてあるじゃん。

27 :
>26
いや名目上はそうだけどさ。
スクリプトでauto〜なんて言い出したらキリが無いワケじゃん。
ぶっちゃけ -n だって自動ループと言っちゃえばそうだし。
そこで -s や -p みたいな名前じゃなくて
わざわざ -a にしたのは、やっぱ awk の名を意識したからなのかな、と
思ったんだよ。

28 :
ruby -ne 'puts split[2]'のほうが楽、と思ったけど
空行とかでの扱い考えると
ruby -ne 'puts split[2] || ""'
になるのか。やっぱawkが楽だな。

29 :
sedのスレとかあったので、思わず「なんでawkを使わない?」って突っ込んでしまったけど、
実はおれも長らくsedからawkへ行けなかった。田中さん(緑のSerrow)が月刊asciiに書いた
記事を読んで使えるようになったのだった。
いまではperlも使うが、やはりawkが楽だなぁ。16進→10進変換の関数作ったり、
バイナリデータ読むためのコードをCで作ったりして無理やり使ってたころが
懐かしい。

30 :
2年くらい前からLinuxを本格的に使い始めたけど
awk(gawk)とsedには特に力を入れて勉強してる
gawkは機能が洗練されて美しいし直感的で使いやすい
リファレンスもとてもしっかりしてる

31 :
おれが一番よく使うのは連想配列。
gawk '{w[$1]++;}END{for(i in w)print i,w[i];}' xxxx.txt | sort
みたいなことを何百回やったことか。

32 :
わらうw
ttp://awk.info/?doc/dsl/awkplusplus.html
object_variable = class_name.new[(optional parameters)]
object_variable.method_name(parameters)
object_variable.delete

33 :
みなさん教えて下さい。
一行毎に読み込み@<と@>で囲まれた部分を
ランダムなアルファベット10文字に置換し、
元々@<@>に囲まれた部分の文字列と置換したランダムな文字列の対応を
別ファイルに書き出し
っていうのをやりたいです。
awkとsedでできるの?
pythonで書くべき?

34 :
できるっちゃーできるが、おすすめはしない。
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
}

35 :
まじぽかのUMAちゃんは最高にかわいいNE!

36 :
printfと$ / $がうまく両立できない・・・
文型向け授業でわざわざlinux使わせるなよ・・・

37 :
やっぱAWKいいよねー
「プログラミング言語AWK」は買い逃してたんで再販速攻で買ったよ。
Excelなんてやってられねーっつーの

38 :
>>37
Excelのvlookupみたいなリレーショナルな事がやりたい場合ってどーしてる?

39 :
連想配列でいいんちゃうん?

40 :
いやさ、複数のシートから引っ張ってくるような感じで、複数のテキストファイルを対象にしたい時。

41 :
そんなん普通に複数ファイル処理すればいいやん。

42 :
>>41
> そんなん普通に複数ファイル処理すればいいやん。
「普通に」の所kwsk

43 :
getlineすりゃえーやろ

44 :
awk初心者です。質問させてください。
awkでアクセスカウンタを作ろうと思い、
以下のようなスクリプトを書いたのですが、
最後のhtmlへの出力(表示)の方法がわかりません。
どうしたらいいのでしょうか?

45 :
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()
}

46 :
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;
}

47 :
>>43
getline知らなかったわ。
難しそうだな・・・

48 :
>>44
SSIの仕組みは理解できていますか。
ttp://httpd.apache.org/docs/2.0/ja/howto/ssi.html

49 :
getline は毎回リファレンス見に行ってるなぁ
頭が劣化しとるわー

50 :
こんなものが落ちてたw
ttp://mitya.pp.ru/chamberlen/assorted/OReilly%20-%20Sed%20&%20Awk%202nd%20Edition.pdf

51 :
Mac OS X Leopard 10.5.8でjgawkを使いたいのです。
ターミナルでawk '{print $0}' filenameですと日本語が悲しいです。
お使いのみなさん、使用法等教えて下さい。

52 :
板違い。

53 :
Mac OS XをUnixとして使ってる人の為のスレ その15
http://pc11.2ch.net/test/read.cgi/mac/1247059597/
こっちのが詳しいかもね

54 :
awk初心者です。
awkにはperlのjoinみたいの関数ありますか?
perl:
print join(":",$_);

55 :
データ集計に便利

56 :
>>54
BEGIN {OFS=":"}{$1=$1;print}

57 :
重複を削除する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)'
-----------------------------

58 :
素人なりですけど
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}'

59 :
echo -n $hoge | awk 'a[$0]++<1{printf(NR>1?RS:_)$0}' RS=:

60 :
a[$0]++<1 じゃなくて
!a[$0]++ とした方が1バイト短くなるな
って、そういう趣旨じゃないか

61 :
プログラミングAWK 3度目の復刊
http://www.fukkan.com/fk/CartSearchDetail?i_no=68313239&tr=t

62 :
>>58,59,60
ご回答、誠に有難うございました!
まだawkの部分理解してないけど、期待通りの動作が確認できました!

63 :
Linuxじゃないんですが、Gawk on Windowsだと、
 gawk '{print $1;}' data.txt
ていうのは、クォーテーションはダブルにしないといけないんですね。。。

64 :
うん、引数文字列をどう解釈するかは awk じゃなくてシェルだから。
cmd.exe の仕様の問題であって、awk の側では対応しようにもできない。

65 :
BEGIN {
printf "256倍のコードが提供されてる\n"
printf "ttp://books.ascii.jp にアクセス\n"
printf "本には4756101623なんてのがついてるけど、本の通りに入れるとnot found\n"
}
END {
print "昔と本の内容が変わってるみたいだな"
}

66 :
END {
  print "まだ始まってもねーよっ!"
}
BEGIN {
  printf "・・・ごめ・・・\n"
}


67 :
{
if ($0 == "aka") print "red"
else print "blue"
}
の最も変態的な記法を教えて下さい。

68 :
$0=/aka/?"red":"blue"

69 :
END {
system("echo " + $0 + " | perl -ne 'if(/"aka"/){print \"red\";}else{print \"blue\";}'")
}

70 :
awkでシェルのPATH変数をマッチさせるときにスラッシュ//を使わない方法を教えていただけませんか?
perlだと##で行けますが

71 :
>>70はマルチ

72 :
ごめんなさい!
マルチがだめとは知りませんでした。

73 :
アルフレッド・V・恵方

74 :
awk で宛名書きだそう
AWK Users JP :: OSC2011 Kagawa 特設サイト
http://gauc.no-ip.org/awk-users-jp/blis.cgi/OSC2011_Kagawa

75 :
awkって今時オブジェクト指向もサポートしてねぇのか。
だせぇ・・・
とか思ってたらこんなのもあるんだな。
http://awk.info/?doc/dsl/awkplusplus.html

76 :
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などは使えそうにないし頭を抱えています。
是非お助け下さい。

77 :
>>76
{for(i=0;i<=NF;i++)if($i ~ /^http:\/\/.+$/)print $i}

78 :
自分は
match($0, /http:\/\/[^ ]+/, f)
を使う気がする。

79 :
#!/bin/sh
cat 入力ファイル | tr ' \t' '\n' | awk '/^http:/'
…まで書きかけて、あれ、これawkじゃなくてgrepで良くね、と思ってしまった俺

80 :
/bin/shでもやはり自分は
expr 文字列 : '.*\(http:\/\/[^ ]*\).*'
を使う気がする。

81 :
うちは>>77の条件を index($i, "http:") == 1 で書くだろうなぁ
でも、処理内容がそれだけなら sed -n 's/^.*\(http:[^ ]*\).*$/\1/p' だなぁ
避けられるなら正規表現は避けたほうが速いんじゃないかと思ってる

82 :
まだどうしてそういう結果になるのか…が全然解らないのですが
一つ一つひもといて自分のものにしていきたいです。
みなさん本当に色々ありがとうございます。

83 :
こういうのもpythonで書くようになってしまった俺は駄目なやつですか

84 :
流石にPythonはこういうサクッとしたテキスト処理には冗長すぎないか?
awk以外でならperl、さもなくばrubyあたりまでが俺は限度だなあ

85 :
BEGIN{ FS="http://"; }{ split($2, item, / /); print FS item[1]; }
とか

86 :
入力からランダムで1行表示する
awk '{ l[i++]=$0 }; END{ srand(); print l[int(i*rand())] }'
シェルスクリプトの方が短いか?

87 :
こう書くと1行しかメモリに保存しないので入力行が多くとも平気です
BEGIN { srand() }
rand() * NR < 1 { x = $0 }
END { print x }

88 :
>>87
それだと行数が多いと後半の表示が少なくなっちゃう

89 :
>>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)
のように、基本的に確率は等しいはずですが……
浮動小数点演算の精度が問題になるような行数の話でしょうか?

90 :
>>87
お、これはすごい!考えたなー。ぱっと思いついた奴は、天才だ。こんな風になりたいわ。
> 浮動小数点演算の精度が問題になるような行数の話でしょうか?
これは初め見たとき思ったけど、それが問題になるなら、
私の書いた方法でもメモリが逼迫してまずい気がします。
ただ、精度やrand()の性能で、実際に統計取ったら88の言うようになるのかもしれません。
あとは、rand()が1を返す実装はないよね?gawkのマニュアル読んで書くのだけど、
関数の説明が簡単に書き過ぎていて、ちょっと不安。

91 :
不要な部分を全部削って87の方が2バイト短いか。
mawkだとsrand()を省けるから、もっと短い。エレガント!
それにしても、4ヶ月ぶりに上がったんだ。ほんと人居ない。

92 :
ワタスは監視してますよ。

93 :
俺も。

94 :
じゃあ、暫く書く

95 :
空行を削除する
awk 1 RS=
sedだと、
sed /^$/d
かな?同じ9文字か。

96 :
>>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の中に入れてしまえば全部同じだけど。

97 :
>>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行目が選ばれる確率)

98 :
>>97
そうでした。電車の中で気が付きました。
x が上書きされる確率じゃなくて、上書きされない確率を掛けないといけませんでした。
納得。

99 :
なんか利点が無いように見えるので、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!

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
時刻合わせ総合スレッド2 (813)
これからはマルチプロセッサでLinux! (290)
[CUI]CUIの時代が戻ってくる[万歳] (434)
使ってるディストリビューションで人間性が分かる (461)
IBMは本気なのか? (339)
使い方が激しく間違っている用語 (242)
--log9.info------------------
■堅いレースで99%金儲け-329■【チャーハン頂戴】 (598)
トウカイトリックにありがとうを言うスレ (800)
競馬税金問題総合 16 (286)
競馬の売上がやばくなっている件 85 (266)
ゴールドシップ Part17 (943)
今年まだ未勝利の騎手を応援するスレッドpart48 (326)
▼とるに足らないニュースの為のスレッド537▼ (1001)
スペシャルウィーク産駒(母父スペ含)応援スレ126 (659)
▼とるに足らないニュースの為のスレッド532▼ (206)
▼とるに足らないニュースの為のスレッド527▼ (519)
オルフェーヴル対ゴールドシップが実現したら (345)
3つのヒントで競走馬当てるスレ 8問目 (703)
【競馬】 今週の複勝予想 144 【必勝】 (795)
【悲報】ロジユニヴァース 牡7 ダービー馬 (現役) (452)
なぜディープインパクトは種牡馬失敗したのか?112 (686)
来年重賞勝ちそうな条件馬2012-2013 (462)
--log55.com------------------
じょじょわんわん149
エビピラフ1186
Jざつ 1607
実質14912
【腐専用】BTSの雑談スレ1
arsざつだん487(IDなし)
実質金剛559
☆【画像】7135