awk ファンクラブ (333レス)
awk ファンクラブ http://mao.5ch.net/test/read.cgi/linux/1215431118/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
116: login:Penguin [sage] 2011/06/08(水) 01:01:03.76 ID:48mfCmU6 そっかー、分かり易さは、上の方だと思ったのですよ。 下のは、awkがどう動くかを知ってないと気持ち悪い感じ。 101みたいなsedスクリプトを、初めて見たときのような。 http://mao.5ch.net/test/read.cgi/linux/1215431118/116
117: login:Penguin [] 2011/06/08(水) 06:42:33.45 ID:3juXEiES 上だと\n\rになっちゃうけど CRLFの\r\nとは違うから Windowsでは認識しないのでは? http://mao.5ch.net/test/read.cgi/linux/1215431118/117
118: login:Penguin [sage] 2011/06/08(水) 12:16:04.61 ID:AGBbsX8a >>117 いや、上のコードは\rが先に出力されるからあってるよ、改行じゃなくて普通の可読文字でためしてみ http://mao.5ch.net/test/read.cgi/linux/1215431118/118
119: login:Penguin [sage] 2011/06/09(木) 23:01:35.59 ID:b4gs0WW2 Windows向けの改行をUnix向けに置き換える awk 1 RS=\\r ORS= 改行弄ったら戻したいよね。一文字多い別解。 awk 'sub(/\r/,"")' >>117 $0にRSは含まれない。print文での出力のときにORSが付けられる。 だから、114のような書き方ができるのです。 え?素直にnkfとかtr使うべきだって?ごめんちゃい。 tr -d \\r nkf -d 短いねえ…そして速そう… http://mao.5ch.net/test/read.cgi/linux/1215431118/119
120: login:Penguin [sage] 2011/06/12(日) 23:20:31.21 ID:8N8UbY4v 正規表現にマッチした部分を全て置換し、その行を表示する awk 'gsub(/foo/,"bar")' sedで書くとこうか。 sed -n 's/foo/bar/gp' こういう処理はsedの方が楽に書けるのかな、うーん。 >>119 awk 'sub(/\r/,"")+1' 下はこの方が良かった。うっかりファイルの内容を消してしまいそうだ。 http://mao.5ch.net/test/read.cgi/linux/1215431118/120
121: login:Penguin [sage] 2011/06/13(月) 19:11:34.42 ID:NkVjy07h だいたい置換はsedで書いたほうが素直に読みやすいと思う 逆にそれ以外のツールでもスクリプトでもなく、awkで書きたくなるのはフィールドを使うものかな http://mao.5ch.net/test/read.cgi/linux/1215431118/121
122: login:Penguin [sage] 2011/06/13(月) 22:57:31.80 ID:0YRj9/YK いや、しかし最近目から鱗落ちまくりです。沢山の書き込みに感謝感謝。 http://mao.5ch.net/test/read.cgi/linux/1215431118/122
123: login:Penguin [sage] 2011/06/14(火) 21:28:05.61 ID:ODOs6IfG 中身の検索はgrep 置換はsedとかtr 結合はcatとかpaste 計算はexprとか場合によりwc 多少組み合わせる必要があるならshでシェルスクリプトwhile、for、read、shiftみたいな 大抵やりたいことに対応するコマンドがある。awkでプログラム風に書くのは人を選ぶのかもね。 このスレが太古の昔に沈んでしまったのも、そのせいか。 実際、プログラム板にもあるけど、あちらはそこそこ書き込みがある。 Linuxも既にGUI全盛、バッチ処理もGUIでという流れか、シェルスクリプト総合スレもなくなってしまったし。 板全体がほとんど動作報告中心になって、Linuxやシステム全体のコアな部分、プログラミングの話題を 話す場所が消えてしまったような気がする。気がするだけ。 http://mao.5ch.net/test/read.cgi/linux/1215431118/123
124: login:Penguin [sage] 2011/06/14(火) 23:04:41.82 ID:CILjaNiq シェルスクリプトはUnix板で話せばいいしな Linuxでメジャーなシェルは大概BSDとかでも使えるし http://mao.5ch.net/test/read.cgi/linux/1215431118/124
125: login:Penguin [sage] 2011/06/15(水) 21:26:33.76 ID: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板のシェルスクリプトスレまで無くなってやがる… http://mao.5ch.net/test/read.cgi/linux/1215431118/125
126: login:Penguin [sage] 2011/06/15(水) 22:50:13.28 ID:QFQ0PbYI ホントだ、何でだろ http://mao.5ch.net/test/read.cgi/linux/1215431118/126
127: login:Penguin [sage] 2011/06/16(木) 00:11:48.62 ID:oqM9OV4C 980超えたからだな http://mao.5ch.net/test/read.cgi/linux/1215431118/127
128: login:Penguin [sage] 2011/06/16(木) 00:29:05.98 ID: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を必要とするときくらいしか、使うべきじゃない。 # 一つのケースでしかないのだけどね。ただ、これほど遅いとは… http://mao.5ch.net/test/read.cgi/linux/1215431118/128
129: login:Penguin [sage] 2011/06/16(木) 09:39:38.00 ID:iftKRWTE >>125 それ、xgawkで書くとどんなになるの? http://mao.5ch.net/test/read.cgi/linux/1215431118/129
130: login:Penguin [sage] 2011/06/16(木) 10:18:36.69 ID:x2P5GNsY >>129 gawk '$0=gensub("</?title>", "", "g", RT)' RS='<title>.*</title>' IGNORECASE=1 http://mao.5ch.net/test/read.cgi/linux/1215431118/130
131: login:Penguin [sage] 2011/06/19(日) 18:13:12.21 ID:O1oYVV5e >>128 待てよ…awkでもパターン検索だけなら遜色なく書けて かつawkのが速いんじゃ、grepの存在価値って… ああ、複数ファイルからの検索があるか つーても、これもawkでFILENAMEとFNR明示したら書けちゃうか… http://mao.5ch.net/test/read.cgi/linux/1215431118/131
132: login:Penguin [sage] 2011/06/20(月) 00:28:57.29 ID:rO0fE487 >>131 まあgrepで済む物は記述が簡単なわけで。 http://mao.5ch.net/test/read.cgi/linux/1215431118/132
133: login:Penguin [sage] 2011/07/01(金) 01:20:48.84 ID:NsJJwAAV xgawkは使ってないなぁ。使ってる鳥には無いし。XHTMLが対象ならもっと短く書けるのだろうか。 >>130 おー!これはクール。 gawkは大文字小文字無視する処理書くの楽だね。流石だ。 >>131 前後の行を表示させたりが楽かも。まあ、滅多にお世話になることないけど… rm -r *でデータ飛ばしたから、そのサルベージに役立つとは…orz http://mao.5ch.net/test/read.cgi/linux/1215431118/133
134: login:Penguin [sage] 2011/07/01(金) 02:00:56.40 ID: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 http://mao.5ch.net/test/read.cgi/linux/1215431118/134
135: login:Penguin [sage] 2011/07/01(金) 23:56:01.08 ID: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倍くらい遅いか。ネイティブとスクリプトだから、まあこうなる、と言ったところだと思う。 短い処理なら有利な場合もあるんだろうけど。 http://mao.5ch.net/test/read.cgi/linux/1215431118/135
136: login:Penguin [sage] 2011/07/04(月) 00:51:55.26 ID:Zh/tRXtG 指定された正規表現を含むファイルの名前を表示する awk 'f!=FILENAME && /regex/{ print f=FILENAME }' gawkならこう書ける。 awk '/regex/{ print FILENAME; nextfile }' >>131に近い。FNRも使って検索結果を表示するスクリプトも、あまり複雑にはならなそう。 下の方が速いけど、mawkだとnextfileをサポートしてなかった。 grep -lと同じ結果で、指定する正規表現によってawkの方が速く動くこともあるよ。 http://mao.5ch.net/test/read.cgi/linux/1215431118/136
137: login:Penguin [sage] 2011/07/05(火) 00:27:00.04 ID:iZUKjs1P AwkのGNU実装、「Gawk 4.0」が登場 http://sourceforge.jp/magazine/11/07/04/0459223 http://mao.5ch.net/test/read.cgi/linux/1215431118/137
138: login:Penguin [sage] 2011/07/06(水) 07:36:41.51 ID:Q5KmFo/I dgawk便利だね。 http://mao.5ch.net/test/read.cgi/linux/1215431118/138
139: login:Penguin [sage] 2011/07/07(木) 02:54:29.78 ID: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で表示してやってるなぁ。 http://mao.5ch.net/test/read.cgi/linux/1215431118/139
140: login:Penguin [sage] 2011/07/07(木) 11:14:47.64 ID:WpiH6Omg gdbやpythonデバッガやらと似てるのでとっつきやすくはあると思う。 http://mao.5ch.net/test/read.cgi/linux/1215431118/140
141: login:Penguin [sage] 2011/07/08(金) 00:37:18.45 ID: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でデバッガが重宝するような長いスクリプトって、どれほど書かれてるんだろう? http://mao.5ch.net/test/read.cgi/linux/1215431118/141
142: login:Penguin [sage] 2011/07/08(金) 17:00:09.91 ID:Iqd7ejAo gawkだけでurlエンコードできますか? http://mao.5ch.net/test/read.cgi/linux/1215431118/142
143: login:Penguin [sage] 2011/07/08(金) 17:42:07.69 ID: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 だと逆に動かない。 http://mao.5ch.net/test/read.cgi/linux/1215431118/143
144: login:Penguin [sage] 2011/07/08(金) 19:08:55.72 ID:gwMiQJC1 Gawk4.0の新オプションはそういう時のためにある訳か。 http://mao.5ch.net/test/read.cgi/linux/1215431118/144
145: login:Penguin [sage] 2011/07/08(金) 19:46:11.33 ID:CbA9+OJF >>141 ファイル名には : も使えるから汎用じゃないね。 あとショートコードを意識してるようなのに不必要なセミコロンとカッコ内側のスペースが あるのはスタイルとして一貫してないな。 http://mao.5ch.net/test/read.cgi/linux/1215431118/145
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 188 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s