腐っても鯛? 騏も老いては駑馬に劣る?
三人の碩学が生み出したスクリプト言語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
2008/01/14(月) 09:45:08
>>83
UNIXでは多くのファイルや出力が欄区切りテキストの形式になっているから
その場使い捨てワンライナーが本来の使い方なんだけど、
他のOSだと BEGIN を main 代わりに使うようなのばっかになるかもね。
UNIXでは多くのファイルや出力が欄区切りテキストの形式になっているから
その場使い捨てワンライナーが本来の使い方なんだけど、
他のOSだと BEGIN を main 代わりに使うようなのばっかになるかもね。
2008/01/14(月) 09:46:06
>>83がsedをどう使っているのか気になる。
sedスクリプトファイルとか作って、スクリプトの引数に処理対象のファイルを渡してたりするのかな。
sedスクリプトファイルとか作って、スクリプトの引数に処理対象のファイルを渡してたりするのかな。
2008/01/14(月) 10:18:29
よく書く一行野郎。
--
du -sk /tmp/* | awk '{sum += $1;} END {print sum / NR;}'
# まぁ、duってのは今思いついただけで、実際にduの出力の平均を取ることはないけどね。
--
paste foo bar | awk '($1 - $2) > 1e-3 || ($1 - $2) < -1e-3 {print NR, $0;}'
# 一致を見るだけならdiffでいいけど、近似を見るには使えないんで。
--
du -sk /tmp/* | awk '{sum += $1;} END {print sum / NR;}'
# まぁ、duってのは今思いついただけで、実際にduの出力の平均を取ることはないけどね。
--
paste foo bar | awk '($1 - $2) > 1e-3 || ($1 - $2) < -1e-3 {print NR, $0;}'
# 一致を見るだけならdiffでいいけど、近似を見るには使えないんで。
2008/01/15(火) 18:34:44
2008/01/15(火) 18:59:18
あ、コード書きそうなのは後者です。
平均とか合計みたいなモノには良さそうですね。
平均とか合計みたいなモノには良さそうですね。
2008/01/15(火) 19:28:50
今日書いた一行野郎。
--
awk '{for (ic = 1; ic <= NF; ++ic) {if (max < $ic) max = $ic;}} END {print max;}'
--
これも全フィールドに拡張しているだけで、単に最大値を得ているだけだね。
--
awk '{for (ic = 1; ic <= NF; ++ic) {if (max < $ic) max = $ic;}} END {print max;}'
--
これも全フィールドに拡張しているだけで、単に最大値を得ているだけだね。
90デフォルトの名無しさん
2008/01/22(火) 16:52:32 よく書く一行
du -k|awk '$1 > 10000'
でかいデレクトリをさがす
du -k|awk '$1 > 10000'
でかいデレクトリをさがす
2008/01/29(火) 23:34:51
俺がよく書く一行野郎
$ awk 1 > hoge.sh
$ awk 1 > hoge.sh
2008/01/31(木) 12:58:14
2008/01/31(木) 18:48:07
>92
Windowsにawk入れてた時に、こんなヘンな癖が付いてしまった。
Windowsにawk入れてた時に、こんなヘンな癖が付いてしまった。
94デフォルトの名無しさん
2008/02/02(土) 12:38:28 すみません、初心者ですがawkに関するスレがここしかなかったので。
↓のソースを書いていただいたのですが、いったいどうすれば使えるのでしょうか?
ちなみに、これはフォルダ内のWinrar形式ファイルのリカバリレコードが付いているか否か
リストを一括で出力するものです。
よろしこ
**************
コマンドラインだけどunrar lt sample.rarの出力利用してリストを作るだけ
使い方はパイプでawkに渡して処理unrar lt *.rar | gawk -f rr.awk
awkなんか入ってないだろうから当然そのままじゃ動かない
rr.awk
#!/usr/local/bin/gawk
BEGIN {$rr=0; printf "%-30s\t%s\n", "FileName", "RecoveryRecord";}
{if($1=="Solid" && $2=="archive"){
for(i=3;i<=NF;i++) printf "%-30s ",$i;printf "\t";getline;getline;
if($0=="Recovery record is present"){printf "Yes / ";
for(;;){getline;if($0=="Data header type: RR"){getline;printf "%sbyte\n",$2;break;}}
}else printf "No\n";}}
↓のソースを書いていただいたのですが、いったいどうすれば使えるのでしょうか?
ちなみに、これはフォルダ内のWinrar形式ファイルのリカバリレコードが付いているか否か
リストを一括で出力するものです。
よろしこ
**************
コマンドラインだけどunrar lt sample.rarの出力利用してリストを作るだけ
使い方はパイプでawkに渡して処理unrar lt *.rar | gawk -f rr.awk
awkなんか入ってないだろうから当然そのままじゃ動かない
rr.awk
#!/usr/local/bin/gawk
BEGIN {$rr=0; printf "%-30s\t%s\n", "FileName", "RecoveryRecord";}
{if($1=="Solid" && $2=="archive"){
for(i=3;i<=NF;i++) printf "%-30s ",$i;printf "\t";getline;getline;
if($0=="Recovery record is present"){printf "Yes / ";
for(;;){getline;if($0=="Data header type: RR"){getline;printf "%sbyte\n",$2;break;}}
}else printf "No\n";}}
2008/02/02(土) 13:01:48
それを動かすにはまず gawk をどこかから入手する。
2008/02/02(土) 17:48:45
>>94
>↓のソースを書いていただいたのですが、
書いた人に聞く。
と答えると、わけのわからん理由を言ってごねるだろうから、
先に言っとくと、そんな見苦しい言い訳するな。
どうせ答えたって、今度は○○がわかりませんとか言い出すんだろ?
どっかからgawkを落として展開しろよ。全く、一生ググってろよカス
"C:\Program Files\WinRAR\UnRAR.exe" lt *.rar | "gawkのフルパス" -f rr.awk
>↓のソースを書いていただいたのですが、
書いた人に聞く。
と答えると、わけのわからん理由を言ってごねるだろうから、
先に言っとくと、そんな見苦しい言い訳するな。
どうせ答えたって、今度は○○がわかりませんとか言い出すんだろ?
どっかからgawkを落として展開しろよ。全く、一生ググってろよカス
"C:\Program Files\WinRAR\UnRAR.exe" lt *.rar | "gawkのフルパス" -f rr.awk
2008/02/10(日) 19:16:33
すいません、あるテキストを{print $1,$2}として抽出して
aaa 1
aaa 2
aaa 3
bbb 1
bbb 2
ccc 1
ccc 4
...
とまではできたんですが、並んでいるデータをそれぞれ、
aaa 6
bbb 3
ccc 5
と集計したいんですが、どのようにすればいいでしょうか?
aaa 1
aaa 2
aaa 3
bbb 1
bbb 2
ccc 1
ccc 4
...
とまではできたんですが、並んでいるデータをそれぞれ、
aaa 6
bbb 3
ccc 5
と集計したいんですが、どのようにすればいいでしょうか?
2008/02/10(日) 19:28:07
awk '{count[$1] += $2;} END{for (aaa in count) {print aaa count[aaa]}}'
あとはソートすればいいはず
あとはソートすればいいはず
9997
2008/02/10(日) 20:22:03 >98さん、ありがとうございます!
情けないのですが、今まで便利なツールに頼っていて全然コマンドについて理解できていなかったので困っていました。
実はメールログで送信者がどれだけの通数を送信してるかを確かめるためにコマンドでできないか、で>97でつまづいていました。
何とか途中までできたんですが、非常にスーパーエレガントな1行コードでして…。
質問ついでで申し訳ないのですが、
(aaa in count) {print aaa count[aaa]}
のaaaについてはどう解釈すればいいのでしょうか?
情けないのですが、今まで便利なツールに頼っていて全然コマンドについて理解できていなかったので困っていました。
実はメールログで送信者がどれだけの通数を送信してるかを確かめるためにコマンドでできないか、で>97でつまづいていました。
何とか途中までできたんですが、非常にスーパーエレガントな1行コードでして…。
質問ついでで申し訳ないのですが、
(aaa in count) {print aaa count[aaa]}
のaaaについてはどう解釈すればいいのでしょうか?
100デフォルトの名無しさん
2008/02/10(日) 20:33:27 >>99
bashとかのforとかと同じで適当な文字列ならなんでもいいです.例に出てきたaaaなんかにするからややこしくなってすみません.
for(hoge in list) {...}
で配列listのキーを片っ端からhogeに入れてループするって意味になるはずですよ.
bashとかのforとかと同じで適当な文字列ならなんでもいいです.例に出てきたaaaなんかにするからややこしくなってすみません.
for(hoge in list) {...}
で配列listのキーを片っ端からhogeに入れてループするって意味になるはずですよ.
101デフォルトの名無しさん
2008/02/10(日) 20:36:22 98じゃないけど
awk '{count[$1] += $2;} END{for (i in count) {printf "%s %i\n", i, count[i]}}'
こうやって書けばしんせつじゃね?
データの中のaaaとloopカウンターのaaaを同じ名前にするのは意地悪だと思うよ
awk '{count[$1] += $2;} END{for (i in count) {printf "%s %i\n", i, count[i]}}'
こうやって書けばしんせつじゃね?
データの中のaaaとloopカウンターのaaaを同じ名前にするのは意地悪だと思うよ
102デフォルトの名無しさん
2008/02/10(日) 20:37:23 101です。すまんonz
103≠98
2008/02/10(日) 20:39:44 あー、みんな書いているから私の書いたのは大幅に削るか。
そのENDブロック内は、
for (制御変数 in 連想配列) {...;}
というパターン。
その前段のcount[$1] += $2は一行目のとき
count["aaa"] += 1と解釈される。以下同様に。
このcountが連想配列として使われているということ。
そのENDブロック内は、
for (制御変数 in 連想配列) {...;}
というパターン。
その前段のcount[$1] += $2は一行目のとき
count["aaa"] += 1と解釈される。以下同様に。
このcountが連想配列として使われているということ。
104デフォルトの名無しさん
2008/02/10(日) 20:42:0510597
2008/02/10(日) 20:52:15 いえいえいえいえ…そういう意味じゃなくて教わっていながらすいませんです。
上記で書いたとおり便利ツールに頼り切ってて殆ど知らない私が悪いのですが…。
今一生懸命3byte程度の脳みそで勉強してるんですが、2日目で挫折しそうで質問させて貰いました…。
たとえばログには
Feb 9 22:44:40 localhost postfix/qmgr[1936]: 345C48C0154: from=<use1@example.com>, size=556, nrcpt=1 (queue active)
と必ず出ます。で、
1,生ログをそのまま処理するのが怖い(大きなファイル)ので、日付でログを抽出して別ファイルへ保存。
2,grepで nrcpt=と抽出して、さらにgrep -vで除外するドメインを指定して抽出
3,そしてsedでnrcpt=を削除して
4,ここで>97のように$7と$9を並べたところで脳みそのバッファエラーを起こしました。
この処理の方法もエレガントなことは分かっていますが、恥は承知でお伺いした次第です…。
上記で書いたとおり便利ツールに頼り切ってて殆ど知らない私が悪いのですが…。
今一生懸命3byte程度の脳みそで勉強してるんですが、2日目で挫折しそうで質問させて貰いました…。
たとえばログには
Feb 9 22:44:40 localhost postfix/qmgr[1936]: 345C48C0154: from=<use1@example.com>, size=556, nrcpt=1 (queue active)
と必ず出ます。で、
1,生ログをそのまま処理するのが怖い(大きなファイル)ので、日付でログを抽出して別ファイルへ保存。
2,grepで nrcpt=と抽出して、さらにgrep -vで除外するドメインを指定して抽出
3,そしてsedでnrcpt=を削除して
4,ここで>97のように$7と$9を並べたところで脳みそのバッファエラーを起こしました。
この処理の方法もエレガントなことは分かっていますが、恥は承知でお伺いした次第です…。
106デフォルトの名無しさん
2008/02/13(水) 07:31:34 gsubで[.*]を置き換えるにはどうすればいいでしょうか?
107デフォルトの名無しさん
2008/02/14(木) 02:38:02108デフォルトの名無しさん
2008/02/16(土) 01:08:44 awkで現在時刻からn分前から以降のログだけを抜き出したいんですが、どうすればいいでしょうか…。
02 15 12:34:56 xxxxxxxxx
02 15 13:45:01 xxxxxxxxx
...
...
...
とかの形式なので、strftime()とかで現在とログの時刻を比較して抜き出す、とかを試したんですがダメでした…
02 15 12:34:56 xxxxxxxxx
02 15 13:45:01 xxxxxxxxx
...
...
...
とかの形式なので、strftime()とかで現在とログの時刻を比較して抜き出す、とかを試したんですがダメでした…
109デフォルトの名無しさん
2008/02/16(土) 01:49:16 >>108 これで駄目かな?(一応 gawk 3.0.4 では動いた)
BEGIN{
n=5
basetime=strftime("%m %d %H:%M:%S", systime()-60*n)
}
{
chktime=substr($0, 1, 14)
if(chktime >= basetime) print
}
BEGIN{
n=5
basetime=strftime("%m %d %H:%M:%S", systime()-60*n)
}
{
chktime=substr($0, 1, 14)
if(chktime >= basetime) print
}
110デフォルトの名無しさん
2008/02/16(土) 02:23:28 >109
ありがとうございます…素直に目が鱗でした…。
> chktime=substr($0, 1, 14)
なんですね…
perlが使えない環境なので、これが分かればいろいろ流用効くので助かりました。
ありがとうございます。もうちょっと精進します。。。
ありがとうございます…素直に目が鱗でした…。
> chktime=substr($0, 1, 14)
なんですね…
perlが使えない環境なので、これが分かればいろいろ流用効くので助かりました。
ありがとうございます。もうちょっと精進します。。。
111デフォルトの名無しさん
2008/02/18(月) 18:58:36112デフォルトの名無しさん
2008/02/18(月) 22:32:44113デフォルトの名無しさん
2008/02/19(火) 02:59:17 >2007年5月9日 第1版第16刷発行
本屋の棚で眠り続けてたってわけじゃないのかw
本屋の棚で眠り続けてたってわけじゃないのかw
114デフォルトの名無しさん
2008/02/24(日) 00:57:13 目が鱗 に一致する日本語のページ 約 1,920 件中 1 - 20 件目 (0.24 秒)
115デフォルトの名無しさん
2008/02/24(日) 01:00:56 メガ鱗
116デフォルトの名無しさん
2008/03/28(金) 21:53:28 sed, awk, ruby を使う。
それぞれ適材適所で使うけど、
「sed だけ」「awk だけ」で済ませられると、
不思議な喜びを感じる。
それぞれ適材適所で使うけど、
「sed だけ」「awk だけ」で済ませられると、
不思議な喜びを感じる。
117デフォルトの名無しさん
2008/03/30(日) 14:05:33118デフォルトの名無しさん
2008/03/30(日) 16:22:26 古いサーバだとPerlすら入ってない事があるからawkは重宝する。
119デフォルトの名無しさん
2008/04/06(日) 10:26:45 最近のgawkがネットワークにも使えると知ってちょっと驚いたw
カーニハンの本レベル(とか256倍)しか知らない人って多いと思う。
カーニハンの本レベル(とか256倍)しか知らない人って多いと思う。
120デフォルトの名無しさん
2008/04/06(日) 12:44:41 ノーマルのawkでXMLを字下げしたりしてうまく表示させるにはどうすればいいのかな・・・
121デフォルトの名無しさん
2008/04/06(日) 17:09:18 sedだけで書けると、俺って頭イイかもって思う。
#!/bin/sed -f
#!/bin/sed -f
122デフォルトの名無しさん
2008/04/06(日) 17:16:17 文字列の単純な置換だけならawkより簡単に書けるんだけど。
awkに固執しないで臨機応変にsedを使うって意味でなら要領がいいという意味で賢いけど。
# awkで書いた方が簡単なことをsedで頑張って書いたのだとしたら、その意味では頭悪いなw
awkに固執しないで臨機応変にsedを使うって意味でなら要領がいいという意味で賢いけど。
# awkで書いた方が簡単なことをsedで頑張って書いたのだとしたら、その意味では頭悪いなw
123デフォルトの名無しさん
2008/04/06(日) 17:34:45 awkからsystemでsed呼ぶことは時々あるw
124デフォルトの名無しさん
2008/04/06(日) 18:49:04 >>24
awkって表計算のような処理に特化してますよね。
その点が非常にユニークというか事務処理の言語だな、と。
visicalc(1979)awk(1977)ですからawkのほうが若干古いんですが、
表計算はセルに直接式を書くという発想が新しかった。うむむ。
awkって表計算のような処理に特化してますよね。
その点が非常にユニークというか事務処理の言語だな、と。
visicalc(1979)awk(1977)ですからawkのほうが若干古いんですが、
表計算はセルに直接式を書くという発想が新しかった。うむむ。
125デフォルトの名無しさん
2008/04/06(日) 19:26:56 VisiCalcの考案者Dan Bricklinによるアイデアの説明
ttp://www.danbricklin.com/history/saiidea.htm
Danの電卓がHPじゃなくてTIなのが意外な感じ。
The idea for the electronic spreadsheet came to me while I was a student at the Harvard Business School, working on my MBA degree, in the spring of 1978.
Sitting in Aldrich Hall, room 108, I would daydream.
"Imagine if my calculator had a ball in its back, like a mouse..." (I had seen a mouse previously, I think in a demonstration at a conference by Doug Engelbart, and maybe the Alto).
And "..imagine if I had a heads-up display, like in a fighter plane, where I could see the virtual image hanging in the air in front of me.
I could just move my mouse/keyboard calculator around, punch in a few numbers, circle them to get a sum, do some calculations, and answer '10% will be fine!'"
(10% was always the answer in those days when we couldn't do very complicated calculations...)
ttp://www.danbricklin.com/history/saiidea.htm
Danの電卓がHPじゃなくてTIなのが意外な感じ。
The idea for the electronic spreadsheet came to me while I was a student at the Harvard Business School, working on my MBA degree, in the spring of 1978.
Sitting in Aldrich Hall, room 108, I would daydream.
"Imagine if my calculator had a ball in its back, like a mouse..." (I had seen a mouse previously, I think in a demonstration at a conference by Doug Engelbart, and maybe the Alto).
And "..imagine if I had a heads-up display, like in a fighter plane, where I could see the virtual image hanging in the air in front of me.
I could just move my mouse/keyboard calculator around, punch in a few numbers, circle them to get a sum, do some calculations, and answer '10% will be fine!'"
(10% was always the answer in those days when we couldn't do very complicated calculations...)
126デフォルトの名無しさん
2008/04/07(月) 02:52:10 はじめましてgawkの質問です
お手すきの時にでもご解答頂けましたら助かります
2chでお話していただいた方からgawkを教えて頂きました
正規表現でマッチした部分がいくつあっても全ての箇所を1アクションで保存できる優れものです
当方、言語は全く知らないので先ほどまでテスト実行しては驚いていました
この優れものを今後末永く使っていきたいのですが
下記の事項をググって見たのですがわかりませんでした
どなたかわかる方おられましたら教えて下さい
私のやりたいこと
・EUCを読み込んでS-JISを出力
・既存のテキスト末尾に追加書き込み保存
(教えて頂いたスクリプトは上書き保存なので出力先の内容が消えてしまいます)
気長に待っていますので何卒よろしくお願い致します
お手すきの時にでもご解答頂けましたら助かります
2chでお話していただいた方からgawkを教えて頂きました
正規表現でマッチした部分がいくつあっても全ての箇所を1アクションで保存できる優れものです
当方、言語は全く知らないので先ほどまでテスト実行しては驚いていました
この優れものを今後末永く使っていきたいのですが
下記の事項をググって見たのですがわかりませんでした
どなたかわかる方おられましたら教えて下さい
私のやりたいこと
・EUCを読み込んでS-JISを出力
・既存のテキスト末尾に追加書き込み保存
(教えて頂いたスクリプトは上書き保存なので出力先の内容が消えてしまいます)
気長に待っていますので何卒よろしくお願い致します
127デフォルトの名無しさん
2008/04/07(月) 03:10:31 >>126
前者はawkでやるべきことではない。iconv, nkfなどそれ専用のツールがある。
後者も必ずしもawkは不要。コマンドラインが使える環境なら普通にできる。
例えば、Unix系なら cat append.txt >> original.txt で既存のファイルに追加できる。
DOS系でも、type append.txt >> original.txt でできる。
要は、awkのいいところはそれ単体でなんでもできる(或いはできない)ことではなく、
コマンドライン環境で力を発揮するツールであること。
例えば、正規表現でマッチした文字列を置換するだけならテキストエディタでもできる。
あーそうそう、エディタがあれば文字コードの変換もそれだけでできる。
所謂テキストエディタを使ったことがないなら、一度(正規表現検索機能、
文字コード変換機能のある)テキストエディタを触ってみるといいかもしれない。
前者はawkでやるべきことではない。iconv, nkfなどそれ専用のツールがある。
後者も必ずしもawkは不要。コマンドラインが使える環境なら普通にできる。
例えば、Unix系なら cat append.txt >> original.txt で既存のファイルに追加できる。
DOS系でも、type append.txt >> original.txt でできる。
要は、awkのいいところはそれ単体でなんでもできる(或いはできない)ことではなく、
コマンドライン環境で力を発揮するツールであること。
例えば、正規表現でマッチした文字列を置換するだけならテキストエディタでもできる。
あーそうそう、エディタがあれば文字コードの変換もそれだけでできる。
所謂テキストエディタを使ったことがないなら、一度(正規表現検索機能、
文字コード変換機能のある)テキストエディタを触ってみるといいかもしれない。
128デフォルトの名無しさん
2008/04/07(月) 03:32:54129デフォルトの名無しさん
2008/04/07(月) 03:56:33 AAA.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtにペーストする
BBB.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
CCC.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
よろしくお願いします
マッチした複数箇所を一括でコピーしてTEST.txtにペーストする
BBB.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
CCC.txtを開き”東京(.+?)号室”を検索する
マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする
よろしくお願いします
130デフォルトの名無しさん
2008/04/07(月) 04:02:07 >>127は結局awkの解答はしないのになんでしゃしゃり出てきたの?
できないじゃん
できないじゃん
131デフォルトの名無しさん
2008/04/07(月) 06:48:34132デフォルトの名無しさん
2008/04/07(月) 12:02:34 >>131
レスありがと
gawk '/東京(.+?)号室/ {print > "TEST.txt";}' AAA.txt
gawk '/東京(.+?)号室/ {print >> "TEST.txt";}' BBB.txt
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
gawk3.16では使えない?
レスありがと
gawk '/東京(.+?)号室/ {print > "TEST.txt";}' AAA.txt
gawk '/東京(.+?)号室/ {print >> "TEST.txt";}' BBB.txt
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
gawk3.16では使えない?
133デフォルトの名無しさん
2008/04/07(月) 13:29:56 >>132
DOSのコマンドラインの使い方は他所で聞いてくれ。
DOSのコマンドラインの使い方は他所で聞いてくれ。
134デフォルトの名無しさん
2008/04/07(月) 13:38:24 役所の窓口みたいな対応だな。
135デフォルトの名無しさん
2008/04/07(月) 13:43:47 DOSのコマンドラインについては多くを知らないんだよ。
136デフォルトの名無しさん
2008/04/07(月) 16:36:42 DOSの場合は空白を含む場合シングルクォートじゃダメだからな。
ダブルクォートで括って中のコードは
シングルクォートか、エスケープしてダブルクォート入れるか。
一番簡単なのは、ワンライナーでもファイルに起こしてしまうこと。
gawk -f myscript.awk AAA.txt
とやってしまえば、シングルクォートとかダブルクォートとか気にする必要はない。
ダブルクォートで括って中のコードは
シングルクォートか、エスケープしてダブルクォート入れるか。
一番簡単なのは、ワンライナーでもファイルに起こしてしまうこと。
gawk -f myscript.awk AAA.txt
とやってしまえば、シングルクォートとかダブルクォートとか気にする必要はない。
137デフォルトの名無しさん
2008/04/07(月) 18:22:15 >>132
二つ問題がある。
gawkの正規表現では.+?というのは使えない。
cmd.exeでは、シングルクォートを引数を
くくるのに使えない。
なんかよくわからんが、perlでテキストを丸飲みしてから
処理すればいいんじゃないのか?
二つ問題がある。
gawkの正規表現では.+?というのは使えない。
cmd.exeでは、シングルクォートを引数を
くくるのに使えない。
なんかよくわからんが、perlでテキストを丸飲みしてから
処理すればいいんじゃないのか?
138デフォルトの名無しさん
2008/04/12(土) 19:00:42 VisiCalc といえば、出始めの頃に TRS-80 用 を Radio Shack で見せてもらったんだけど、学生だった私には価値がわからなかったなぁ。
まぁ、これに限らず、『なんでこんなコマンドやオプションがあるんだ?』ってのは多い。
使い方じゃなく、なぜそれがあるのかを包括的に解説した本や web site ってありますか。(たとえば多くの unix コマンドを網羅しているとか)
まぁ、これに限らず、『なんでこんなコマンドやオプションがあるんだ?』ってのは多い。
使い方じゃなく、なぜそれがあるのかを包括的に解説した本や web site ってありますか。(たとえば多くの unix コマンドを網羅しているとか)
139デフォルトの名無しさん
2008/04/12(土) 19:01:22 ああ、スレ違いだった。ごめんごめん。
140デフォルトの名無しさん
2008/04/12(土) 19:58:47 なんという誤爆
141デフォルトの名無しさん
2008/05/06(火) 02:42:04 >>132 もう居ないかな。gawk3.1.6 + nkf2.0 使用@cmd.exe
C:\work>type aaa.txt (※EUCなので化ける事を確認)
、ロ、イ、ロ、イ
ナ・ケ貍シ
ナ・」イケ貍シ
ナ・」ア」ーケ貍シ
ナ・、ロ、イケ貍シ
ナ・、ユ、ャケ・ナ・ユ、ャケ貍シ
ナ・」ウケ貍シ、ネナ・」オケ貍シ
C:\work>nkf -Es AAA.txt
ほげほげ
東京号室
東京2号室
東京10号室
東京ほげ号室
東京ふが号
東ふが号室
東京3号室と東京5号室
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}"
東京号室
東京2号室
東京10号室
東京ほげ号室
東京3号室と東京5号室
既出の通り文字変換nkf(>>127) 正規表現の制約で条件変更(>>137)
実際に使う場合はこんな感じでバッチ作るとか。
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}" >>TEST.txt
C:\work>type aaa.txt (※EUCなので化ける事を確認)
、ロ、イ、ロ、イ
ナ・ケ貍シ
ナ・」イケ貍シ
ナ・」ア」ーケ貍シ
ナ・、ロ、イケ貍シ
ナ・、ユ、ャケ・ナ・ユ、ャケ貍シ
ナ・」ウケ貍シ、ネナ・」オケ貍シ
C:\work>nkf -Es AAA.txt
ほげほげ
東京号室
東京2号室
東京10号室
東京ほげ号室
東京ふが号
東ふが号室
東京3号室と東京5号室
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}"
東京号室
東京2号室
東京10号室
東京ほげ号室
東京3号室と東京5号室
既出の通り文字変換nkf(>>127) 正規表現の制約で条件変更(>>137)
実際に使う場合はこんな感じでバッチ作るとか。
C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}" >>TEST.txt
142141
2008/05/06(火) 02:56:02 と、方法を書いておいてアレだけど、
秀丸使ってるならgrepの実行で検索するファイルに(現在の内容)で
検索結果からファイル名と行番号を除去するのでもできそうな気がする。
盛大にスレ違いだけど。
秀丸使ってるならgrepの実行で検索するファイルに(現在の内容)で
検索結果からファイル名と行番号を除去するのでもできそうな気がする。
盛大にスレ違いだけど。
143デフォルトの名無しさん
2008/05/06(火) 14:28:43144デフォルトの名無しさん
2008/06/16(月) 01:50:26 ひでえwwwwwwwwwwwwww
145デフォルトの名無しさん
2008/06/16(月) 01:50:57 すまん誤爆
146デフォルトの名無しさん
2008/06/25(水) 02:17:58 質問です!
以下のファイルhogeからawkで、価格を抜き出して合計値を出したいと思っています。
ファイルの内容は、書籍名と価格です。価格は一番後ろの数字になります。
----------------------
$ cat hoge
それいけ!あんぱんまん 1000
メタボリックを撃退せよ 1000
下流社会 1000
上流社会と下流社会 日本のこれから 1000
論文 2008 日本の抱える問題 1000
論文 2007 日本の抱える問題 過去問題集 1000
----------------------
難しいのが、書籍名の2008や2007などの数値が含まれていることや空白が含まれていることです。
1行目の場合2列目が価格になりますが、2行目の場合4列目が価格となります。
このように一番最後の列(価格)を取得し、合計値を計算するにはどうすればよいでしょうか?
ご教示お願いいたします。
以下のファイルhogeからawkで、価格を抜き出して合計値を出したいと思っています。
ファイルの内容は、書籍名と価格です。価格は一番後ろの数字になります。
----------------------
$ cat hoge
それいけ!あんぱんまん 1000
メタボリックを撃退せよ 1000
下流社会 1000
上流社会と下流社会 日本のこれから 1000
論文 2008 日本の抱える問題 1000
論文 2007 日本の抱える問題 過去問題集 1000
----------------------
難しいのが、書籍名の2008や2007などの数値が含まれていることや空白が含まれていることです。
1行目の場合2列目が価格になりますが、2行目の場合4列目が価格となります。
このように一番最後の列(価格)を取得し、合計値を計算するにはどうすればよいでしょうか?
ご教示お願いいたします。
147デフォルトの名無しさん
2008/06/25(水) 02:28:00 awk '{x+=$NF}END{print x}' hoge
148デフォルトの名無しさん
2008/06/25(水) 09:33:15 xじゃなくてsumとかにしようよ。
149デフォルトの名無しさん
2008/06/25(水) 13:36:51 一行野郎は手数(打数)重視なんじゃまいか
150デフォルトの名無しさん
2008/06/25(水) 15:27:28 難しいってマニュアル読めば最後の要素を指すものが何か書いてあると思うが
151デフォルトの名無しさん
2008/06/25(水) 16:09:13 読んでたら他人になんか聞きません。
152デフォルトの名無しさん
2008/06/25(水) 16:34:16 じゃあ、マニュアル読んでもわからなかったらお手上げか
153デフォルトの名無しさん
2008/06/29(日) 21:37:04 Windows 版の gawk-3.1.5 で`双方向パイプがうまく動作しません。以下、
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC182
からのサンプルファイルですが、途中で止まってしまって、返事が返ってきません。
BEGIN {
command = "sort"
n = split("abcdefghijklmnopqrstuvwxyz", a, "")
for (i = n; i > 0; i--)
print a[i] |& command
close(command, "to")
while ((command |& getline line) > 0)
print "got", line
close(command)
}
Cygwin の gawk では問題ありませんでした。
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC182
からのサンプルファイルですが、途中で止まってしまって、返事が返ってきません。
BEGIN {
command = "sort"
n = split("abcdefghijklmnopqrstuvwxyz", a, "")
for (i = n; i > 0; i--)
print a[i] |& command
close(command, "to")
while ((command |& getline line) > 0)
print "got", line
close(command)
}
Cygwin の gawk では問題ありませんでした。
154デフォルトの名無しさん
2008/07/01(火) 20:42:14 これ使うといいよ
ttp://www.pipeunish.jp/
ttp://www.pipeunish.jp/
155デフォルトの名無しさん
2008/07/02(水) 01:35:15 どうやったら Cygwin の gawk(GNU Awk 3.1.6) で print length("あいう") が 3 になるのですか?
156デフォルトの名無しさん
2008/07/02(水) 02:13:54 Windowsのバージョンくらい書こうな。でないと釣りと思われるよ
157デフォルトの名無しさん
2008/07/02(水) 08:51:57 jgawk?
158デフォルトの名無しさん
2008/07/02(水) 09:32:16 gawk.dllって、まだ誰かメンテしてくださってるんでしょうか?
最新版gawkのdllを探してるんですが、見つかりません。
または、ソースのtar.gzからdllを作る方法が載っているページを
御存知の方がいらっしゃいましたら、教えていただけると助かります。
最新版gawkのdllを探してるんですが、見つかりません。
または、ソースのtar.gzからdllを作る方法が載っているページを
御存知の方がいらっしゃいましたら、教えていただけると助かります。
159デフォルトの名無しさん
2008/07/02(水) 10:34:53 なにをいってるのかわからん
ソースのtar.gzってなに?
ソースのtar.gzってなに?
160デフォルトの名無しさん
2008/07/02(水) 10:42:47 http://ftp.gnu.org/gnu/gawk/ からダウンロードできるgawk-*.tar.gzのことですが。。
sourceからgawk.exeを作ったりしないのですか??
dllと書いているのでわかるかとは思いますが、
windows環境下での話です。普段はcygwinでmakeしたgawkを使っているのですが、
dllがあると他の言語から呼び出して使えるので便利かなーと思ってます。
sourceからgawk.exeを作ったりしないのですか??
dllと書いているのでわかるかとは思いますが、
windows環境下での話です。普段はcygwinでmakeしたgawkを使っているのですが、
dllがあると他の言語から呼び出して使えるので便利かなーと思ってます。
161デフォルトの名無しさん
2008/07/02(水) 10:45:49 cygwinはwin用のソースじゃないから
win用のソースがいる
win用のソースがいる
162デフォルトの名無しさん
2008/07/02(水) 11:53:32 >>160
昔あったDLL版は作者が独自に作ったものみたいで
本家に反映されてないから本家のソースからDLLを作るのは無理。
DLL版のソースを参考にして自力で作るか
できないなら作者に連絡して協力を求めるしかない。
昔あったDLL版は作者が独自に作ったものみたいで
本家に反映されてないから本家のソースからDLLを作るのは無理。
DLL版のソースを参考にして自力で作るか
できないなら作者に連絡して協力を求めるしかない。
163デフォルトの名無しさん
2008/07/02(水) 12:05:07 >>160
自分で改修するしかないだろ
自分で改修するしかないだろ
164デフォルトの名無しさん
2008/07/03(木) 02:36:53 (ノ∀`) アイタタタ
165155
2008/07/05(土) 15:47:31 >156
XP [Version 5.1.2600] でつ
XP [Version 5.1.2600] でつ
167デフォルトの名無しさん
2008/07/06(日) 06:36:13 うお?
作者降臨か
作者降臨か
168デフォルトの名無しさん
2008/07/06(日) 07:02:21 すんばらすぃ
169デフォルトの名無しさん
2008/07/20(日) 00:40:48 AWK 使って15年? 30年前のコードが吐き出すデータをちょこっと処理しようとして…
FS=/[ ()]+/ は期待通りの動きをせず、FS="[ ()]+" と書かねばならない。
初めて知った。
検索しても、これについて明快に書いてあるページがなかなか見つからなかったが
>正規表現定数がそれ自身として現れたとき、それはパターン中に現れたかのように、
>つまり`($0 ~ /foo/)' のようにみなされる。
<中略>
>言語のこの機能は、POSIX標準までドキュメント化されなかった。
orz
これで1時間ぐらいムダにした。私が知らなかっただけですか??
FS=/[ ()]+/ は期待通りの動きをせず、FS="[ ()]+" と書かねばならない。
初めて知った。
検索しても、これについて明快に書いてあるページがなかなか見つからなかったが
>正規表現定数がそれ自身として現れたとき、それはパターン中に現れたかのように、
>つまり`($0 ~ /foo/)' のようにみなされる。
<中略>
>言語のこの機能は、POSIX標準までドキュメント化されなかった。
orz
これで1時間ぐらいムダにした。私が知らなかっただけですか??
170デフォルトの名無しさん
2008/07/20(日) 00:58:40 『プログラミング言語AWK』には一応載ってるけどな
> (FSに代入される)文字列が1文字より長いときは,正規表現として扱われる
> (FSに代入される)文字列が1文字より長いときは,正規表現として扱われる
171デフォルトの名無しさん
2008/07/20(日) 01:10:48 ベル研系統の言語は記述の自由度はあるが挙動がつかみづらい
172デフォルトの名無しさん
2008/07/20(日) 02:09:53 >>170
””で囲んだ文字列が正規表現として扱われる ということと
//で囲んだ正規表現定数で書いてはいけない ということは同じではない。
実際、split関数の 第3引数に与える正規表現は どちらでも動く
むむむ、ここでは($0~/foo/)に置き換えて評価されないんだ…
171の意見が正しいようだね チャンチャン
””で囲んだ文字列が正規表現として扱われる ということと
//で囲んだ正規表現定数で書いてはいけない ということは同じではない。
実際、split関数の 第3引数に与える正規表現は どちらでも動く
むむむ、ここでは($0~/foo/)に置き換えて評価されないんだ…
171の意見が正しいようだね チャンチャン
173デフォルトの名無しさん
2008/07/21(月) 12:39:44 複数のファイルの読み込みってできますか?
print ファイル1の$2 ファイル2の$1
みたいな感じで
print ファイル1の$2 ファイル2の$1
みたいな感じで
174デフォルトの名無しさん
2008/07/21(月) 13:06:32 >>173
pasteで繋いじゃダメ?
私はよくやるけど。
仮にファイル1が5カラム固定なら、
paste ファイル1 ファイル2| awk '{print $2 $6;}'
てな感じで。
# カラム数可変ならもう一捻り必要だけどね。
pasteで繋いじゃダメ?
私はよくやるけど。
仮にファイル1が5カラム固定なら、
paste ファイル1 ファイル2| awk '{print $2 $6;}'
てな感じで。
# カラム数可変ならもう一捻り必要だけどね。
175デフォルトの名無しさん
2008/07/21(月) 13:50:02 >>173
awkだけでやりたいならgetlineを使えばできる。
awkだけでやりたいならgetlineを使えばできる。
176デフォルトの名無しさん
2008/07/22(火) 18:37:52 awkすごい便利で、gnuplotと組み合わせてExcelから解放されつつあります。
上の方にあったDFAとNFA使ってる事からくる違いってなんですか?
上の方にあったDFAとNFA使ってる事からくる違いってなんですか?
177デフォルトの名無しさん
2008/07/23(水) 02:40:07 >>176
一番の違いは、DFAだと後方参照ができないことかな。
とりあえず
DFA
前準備に手間を掛けるけど処理そのものは早い
NFA
即座に処理を始めるけど、処理に時間がかかる場合がある。
ぐらいに考えておけばいいと思う。
一番の違いは、DFAだと後方参照ができないことかな。
とりあえず
DFA
前準備に手間を掛けるけど処理そのものは早い
NFA
即座に処理を始めるけど、処理に時間がかかる場合がある。
ぐらいに考えておけばいいと思う。
178デフォルトの名無しさん
2008/08/02(土) 00:57:57 保守
179デフォルトの名無しさん
2008/08/02(土) 14:34:05 sh + awk は明らかに簡単だと思う。
sh + awk で出来ることを perl のみで記述する人の気持ちがどうしても理解出来ない。
ただ、ネットワークプログラミング以上になるとC, perl, ruby にならざるを得ないけど。
マシン単体での種々の手続き記述だと、
sh + awk がやっぱり一番完結になると思うんだけどな〜。
sh + awk で出来ることを perl のみで記述する人の気持ちがどうしても理解出来ない。
ただ、ネットワークプログラミング以上になるとC, perl, ruby にならざるを得ないけど。
マシン単体での種々の手続き記述だと、
sh + awk がやっぱり一番完結になると思うんだけどな〜。
180デフォルトの名無しさん
2008/08/02(土) 14:49:58 おれもawkでできることならawkでやる。
でもあまりにトリッキーなことになりそうだったらperlでやったりするかな。
でもあまりにトリッキーなことになりそうだったらperlでやったりするかな。
181あいちゃん
2008/08/03(日) 01:39:18 人に渡す可能性があるなら、awkは結構つらいことがある。
Perlでやれば基本的に問題ないから、Perlで書く癖がつく。
ShellScriptでいったん使うだけなら、awkは便利だけど。
Perlでやれば基本的に問題ないから、Perlで書く癖がつく。
ShellScriptでいったん使うだけなら、awkは便利だけど。
182デフォルトの名無しさん
2008/08/04(月) 01:23:58183デフォルトの名無しさん
2008/08/04(月) 02:16:24 >>182
同感。ただバイナリは仕方ないにしても、
全半角混在の固定長フォーマットが扱いにくいんだよな。
ASCIIにすると全角のみ部分が処理しにくいし、
SJISとかにすると正しく切り出せないし・・・
あれはなんとかならんものかな。
同感。ただバイナリは仕方ないにしても、
全半角混在の固定長フォーマットが扱いにくいんだよな。
ASCIIにすると全角のみ部分が処理しにくいし、
SJISとかにすると正しく切り出せないし・・・
あれはなんとかならんものかな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 死にてえやつこい
- 【朗報】アメリカ、貿易赤字が市場予想を超える大幅縮小WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 【東京新聞】「偽サッチャー」「自滅的」「時代遅れ」高市首相の経済政策を海外メディアが酷評www [718678614]
- 【悲報】維新の政治資金でガールズバー、高市首相「良いか悪いかは国民の皆さまが判断されること」 [115996789]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【悲報】女性「スタバで癒やされに来たのに、小汚いおっさんがいたあ!!😭」 [769050516]
