awkについて語るスレ $2at TECH
awkについて語るスレ $2 - 暇つぶし2ch708:デフォルトの名無しさん
12/08/03 20:21:59.43 .net
昔それでベクトル演算して遊んだな

709:デフォルトの名無しさん
12/08/04 09:23:47.83 .net
Rubyはそこそこワンライナーも書ける感じがする、awkやPerlほどじゃないけどね
Pythonは流石にコード起こさないと辛いことが多いが

710:デフォルトの名無しさん
12/08/04 10:27:49.07 .net
awkでmatlabみたいなベクトル演算できるようにしてほしい

711:デフォルトの名無しさん
12/08/04 16:48:36.10 .net
awkでクラスを使えるようにしてほしい

712:デフォルトの名無しさん
12/08/04 17:06:19.06 .net
awkで全ての魔法少女を救ってほしい

713:デフォルトの名無しさん
12/08/04 17:08:30.07 .net
awkさんは魔女

714:本田
12/08/05 07:21:28.03 .net
Awk++
URLリンク(awk.info)
OO in AWK++
The awk++ language provides object oriented programming for AWK that includes:
classes
class properties (persistent object variables)
methods
inheritance, including multiple inheritance

URLリンク(lawker.googlecode.com)


715:デフォルトの名無しさん
12/08/05 09:56:26.63 .net
デバッグ大変過ぎて死ぬる
$ cat witch.awkpp
class Witch {
var spell
method new() { spell = "mahalic mahalita" }
method perform() { print spell }
}
class Samantha : Witch {
method perform() { print "twitch" }
}
BEGIN {
# wife = Witch.new() エラー要因行
wife = Samantha.new()
wife.perform()
}
$ gawk -f awkpp -r witch.awkpp
gawk: -:10: () エラー要因行
gawk: -:10: ^ syntax error
gawk: -:10: () エラー要因行
gawk: -:10: ^ 表現の char '?' は不正です。

716:デフォルトの名無しさん
12/08/22 00:09:49.86 .net
size: 656 byte, supports -o -v option. Array A and B can be the same (NEW)
function xagrep( o, re, A, B, this, a, i,k ){
k=0;B[0]=A[0];if(o~"-v"){for(i=1;i<=A[0];i++){if(!match(A[i],re)) B[k+=1]=A[i];}B[0]=k;return k};
if(o~"-o"){B[B[0]+1]=0;for(i=1;i<=A[0];i++){a=A[i];if(i==k){i=i-B[B[0]+1]+1;B[B[0]+1]=k;k=B[0]+2;
while(i<=B[B[0]+1]){B[i++]=B[k];delete B[k++];}i=B[B[0]+1];k=i;B[B[0]+1]=0;}while(match(a,re)){
if(i>k){B[k+=1]=substr(a,RSTART,RLENGTH);}else{B[B[0]+1+(B[B[0]+1]+=1)]=substr(a,RSTART,RLENGTH);
k++}a=substr(a,RSTART+RLENGTH)}}if(i<k){i=k-i;k=B[0]+1;B[0]=i+B[B[0]+1];while(i<B[0])B[i+=1]=B[k+=1];
while(i<k)delete B[i+=1];}return B[0]}for(i=1;i<=A[0];i++){if(match(A[i],re))B[k+=1]=A[i];}B[0]=k;return k;
}
これ以上削れるところ無いかな? 
高速化+サイズ優先で、変数はできるだけ使う数を少なくとの条件で

717:デフォルトの名無しさん
12/08/22 09:51:11.01 .net
>>708
その3つの条件の優先度がわからんな。

結構同じ部分式があるので変数に入れた方が変数は増えるけど短くなるし
場合によっては速度も速いとかありそうだけどどうなん?

例えばB[0]は特別な用途っぽいけどxとか1文字変数にしてreturnの直前に
書き戻した方が文字数は稼げる。

あと細かいがhoge+=1より++hogeの方が1文字短いとか、いらない「;」が
残ってるとか詰めが甘いところがまだあるね。

718:デフォルトの名無しさん
12/09/30 22:45:00.64 .net
以下のようなデータの処理について質問いいでしょうか。
$1に経過時間(時刻)、$2に「速度」があれば$3の数値は速度を、$2$3に
「up a」「down a」などとあればその時刻での行動を示します。

このデータからup、downの場所を求めたいと思います。
つまり、下の例で移動開始からの距離3でup a、距離3.5でup b、という具合です。
経過時間と速度から場所を計算するだけですが。速度を変更するタイミング・
回数は不定、速度データと行動データはともに経過時間順に記録されています。
速度変更をどう扱えばいいのか、ちょっと頭が回りません。

---元データ例---
0 速度 10
50 速度 20
200 速度 25
30 up a
35 up b
40 down a
40 down b
50 up a
70 down a
200 up c
250 down c

---処理後---
3 up a
3.5 up b
4 down a
4 down b
5 up a
6 down a
12.5 up c
14.5 down c

719:デフォルトの名無しさん
12/10/01 11:28:30.42 .net
疑問を提示。
$1が常に時刻で$2が速度のときの$3が速度なら、
30 up aのときに30 * 10


720:で300 up aになるんじゃないだろうか。 同じように、70 down aのときに50 * 10 + (70 - 50) * 20で900 down aになるんじゃないだろうか。 $3が速度(単位時間当たりの移動量)ではなく単位移動量当たりの所要時間なのであれば、 30 up aで30 / 10 = 3、70 down aで50 / 10 + (70 - 50) / 20 = 6になるんだけどね。



721:デフォルトの名無しさん
12/10/01 13:21:34.21 .net
実装してみた。速度が途中に出てきてもいいようにposを毎回計算するから効率悪いけど。
--
BEGIN {
sCount = 0;
}
$2 == "speed" {
sTime[sCount] = $1;
sSpeed[sCount] = $3;
++sCount;
next;
}
{
pos = 0;
for (ic = 1; ic < sCount; ++ic) {
if (sTime[ic] > $1) break;
pos += (sTime[ic] - sTime[ic - 1]) / sSpeed[ic - 1];
}
pos += ($1 - sTime[ic - 1]) / sSpeed[ic - 1];
print pos, $2, $3;
}

722:デフォルトの名無しさん
12/10/01 20:30:33.48 .net
>>711
すみません、前者ですね。なんだろう、恥ずかしい。

>>712
なので、アクション部の / を * に変えればよさそうです。

お二方、ありがとうございます。

723:デフォルトの名無しさん
12/12/13 11:40:43.98 .net
awkにかわる同等のものあります?

724:デフォルトの名無しさん
12/12/13 13:08:08.26 .net
python

725:デフォルトの名無しさん
12/12/13 13:13:55.85 .net
>>715
awkみたいに使い勝手いいのかな?

726:デフォルトの名無しさん
12/12/13 13:18:24.65 .net
良いですよ

727:デフォルトの名無しさん
12/12/13 13:24:31.23 .net
>>717
ありがとす。勉強してみます

728:デフォルトの名無しさん
12/12/13 14:45:25.45 .net
はい

729:デフォルトの名無しさん
13/02/06 03:49:18.86 .net
“任意の記号”を含んだシェル変数をawkに渡すことは可能ですか?たとえば

[user@localhost ~]$ var='hoge'
[user@localhost ~]$ echo "hoge" | awk -v var="$var" '
$0 ~ var {print var}
END {print var}
'
hoge
hoge

ここで、varに$を含ませると

[user@localhost ~]$ var='hoge$fuga'
[user@localhost ~]$ echo "hoge" | awk -v var="$var" '
$0 ~ var {print var}
END {print var}
'
hoge$fuga

とうまくマッチしませんでした。var自体は渡されているはずですが、何が原因でしょうか?

730:デフォルトの名無しさん
13/02/06 11:23:41.42 .net
>>720
いちぎょうめのひだりがわの var は、ひょうかのさいに
せいきひょうげんへのかたへんかんがおこなわれる。

$0 ~ /hoge$fuga/ {print "hoge$fuga"}
END {print "hoge$fuga"}

めたもじとなってしまうものは、じぜんあるいはこーどのなかで
えすけーぷするひつようがある。

731:デフォルトの名無しさん
13/02/06 11:29:22.31 .net
~(チルダ)の右辺は正規表現として解釈されるから、"hoge" ~ /hoge$fuga/ でマッチするわけがない。
逆に寧ろ、"hoge$fuga" ~ /hoge/ ならマッチする。

732:デフォルトの名無しさん
13/02/06 11:33:09.61 .net
>>720
>721も>722もどちらも原因。やりたいことをよく整理しよう。

733:720
13/02/06 15:09:21.72 .net
すいません、echo "hoge"ではなくecho "$var"でした。
ただ、結果は>>720と同じです。

要は入力ファイル内の「メタ文字込みの任意の文字列」を、別の「メタ文字と改行込みの任意の文字列」で置換する、
というのをメタ文字のエスケープ等の面倒な処理をせずにサクッとやりたいのですが、できますか?

734:デフォルトの名無しさん
13/02/07 05:01:43.19 .net
ムリ

予め「メタ文字と言っても $ しか出てこない」とか判ってるなら大したこと無いけど
一般化すればするほど面倒になる

735:720
13/02/07 22:14:56.21 .net
>>725
やはりそうですか。
今までこういった処理はsedでしこしこエスケープしてやってたんですが、いい加減面倒になったので、
たとえばfgrepみたいに正規表現をオフにして処理する方法はないかと探しているんですが、
awkでは無理ですか・・・。

736:デフォルトの名無しさん
13/02/08 11:20:14.98 .net
>>726
単に一致なら正規表現なんか使わずに比較すればいいじゃん。
fgrepで事が足りるのならawkからfgrepを起動すればいいじゃん。

737:デフォルトの名無しさん
13/02/08 19:27:47.04 .net
>>726
fgrepなら index()関数じゃないの?

738:720
13/02/09 15:32:27.55 .net
>>727
>単に一致なら正規表現なんか使わずに比較すればいいじゃん。
意味が分からないんですが、awk上の話ですよね?

>>728
index()の引数は文字列だから、これをうまく使えば目的の処理ができる・・・のかな?

でもなんかawkでごちょごちょやるより、メタ文字をエスケープする前処理をかますなり
何なりしたほうが素直な気がしてきた・・・。たとえばこんな感じで

$ var='hoge$fuga'
$ var2=$( echo "$var" | sed 's/\$/\\\\$/g' ) ←エスケープ処理
$ echo "$var" | awk -v var="$var2" '
$0 ~ var {print var}
END {print var}
'
hoge\$fuga
hoge\$fuga

739:デフォルトの名無しさん
13/02/09 17:49:52.25 .net
/bin/shでごちょごちょやるのが好みなら、awkもfgrepも使わず、case文でやりゃいいんじゃないの。

740:デフォルトの名無しさん
13/02/09 21:34:09.39 .net
>>729
文字列の比較は等号でできるって認識はないの?

741:デフォルトの名無しさん
13/02/10 14:31:49.57 .net
>729
いや、その方法でも結局 ' はエスケープが必要でしょ。
ダイレクトにシェル変数に入れる方法か、
ファイルなどに吐き出しておく方法の方が安定。
まぁそれでも改行とか制御文字入れられるともにょる場合があるけどな。

742:デフォルトの名無しさん
13/02/11 20:15:01.17 .net
そこまでめんどくさくなったらperlとかrubyとか使った方が楽だぞw

743:デフォルトの名無しさん
13/02/11 22:46:25.57 .net
何で gawk -f とか使わずワンライナーに拘るのかねぇ

744:デフォルトの名無しさん
13/02/12 22:00:38.07 .net
>>732
中韓ファイルを作るのは情弱の仕事(ドヤ顔
>>734
ワンライナーディスってんの?

745:デフォルトの名無しさん
13/03/11 10:05:12.56 .net
#
# text converter ( Mac to MS-DOS on Windos/MS-DOS machine)
# convert CR to CR+LF
#
BEGIN{ RS = "\r" }
{ print }

746:デフォルトの名無しさん
13/03/15 08:05:25.28 .net
#
# Line(行数)を数える
#

END { FNR }

747:デフォルトの名無しさん
13/03/20 19:07:17.00 .net
# text to html converter
# usage: awk -f txt2htm.awk infile1.txt > outfile2.html

BEGIN{
print("<html>"); print("<head>")
print("<titile> My favorite URLs </titile>")
print("</head>"); print("<h1> </h1>"); print("<body>");
}

/^[:space:]*http/ { print "<A HREF=\""$1"\">"$1"</A><BR>"}

END{
print("</body>")
print("</html>")
}

748:UNIX(LF) to DOS(CR+LF) conversion
13/03/21 21:15:00.86 .net
awk 1 infile1 > outfile2.txt

749:デフォルトの名無しさん
13/03/21 22:10:08.07 .net
# awk -f add.awk
BEGIN {
  s1 = "323524855"
  s2 = "4972560"

  reverse(a2, s2)
  size = reverse(a1, s1) # s1 > s2
  carry = 0

  for(k = 1; k <= size; k++) { # s1 > s2
    d = a1[k] + a2[k] + carry
    if(d >= 10) {
      e[k] = d - 10
      carry = 1
    } else {
      e[k] = d
      carry = 0
    }
  }

  if(carry == 1) {
    e[k] = 1
    size = k
  }

  g = produce_string(e, size)
  printf("%s + %s = %s\n", s1, s2, g)
  printf("%f\n", s1 + s2)
  exit
}

750:デフォルトの名無しさん
13/03/21 22:11:11.39 .net
# >>740のつづき
function reverse(a, s, k, i) {
  k = 1;
  size = length(s)
  for(i = size; i >= 1; i--) {
    a[k++] = substr(s, i, 1)
  }

  return size
}
function produce_string(a, size, i) {
  g = ""
  for(i = size; i >= 1; i--) {
    g = g a[i]
  }

  return g
}

751:デフォルトの名無しさん
13/03/21 22:12:57.08 .net
function produce_string(a, size, g, i) {

752:grepをawkで
13/03/22 13:32:02.74 .net
# usage: awk -f grep.awk char1 file1 file2

BEGIN{
pattern = ARGV[1]
ARGV[1] = ""
}
$0 ~ pattern {print($0" File name=" FILENAME)}

753:デフォルトの名無しさん
13/11/30 12:16:25.95 .net
$ echo 10 20 30 | awk '{for(i=0;i<4;)print _$++i}'
10
20
30

_$++iでも$++iでもどちらでもいけるのですが、アンダースコアが付いて何故大丈夫なのでしょうか?

754:デフォルトの名無しさん
13/11/30 16:04:55.55 .net
すいません、わかりました
空の変数_と$++iの結果が一緒になってただけなんですね

755:デフォルトの名無しさん
13/11/30 20:37:58.81 .net
単に式を並べると文字列連結になる、の罠か

756:デフォルトの名無しさん
14/04/02 00:10:13.15 T3/5Epfc.net
保守

てか半年近く書き込みが無かったか

757:デフォルトの名無しさん
14/04/19 13:45:38.45 Db2IzPol.net
とあるgawkスクリプトの先頭で
{last_hoge=hoge; hoge=$ 3}
ってやってるんだけど、
hoge=$ 3はhoge=$3の間違い? それともこういう記法がある?

758:デフォルトの名無しさん
14/04/19 14:56:08.53 A73fEYrr.net
>>748
$ は演算子だから、a=b+1をa = b + 1と書くようなものかな。

759:デフォルトの名無しさん
14/04/19 21:10:32.64 Db2IzPol.net
ええー 演算子だったのかあ。衝撃の事実

760:デフォルトの名無しさん
14/04/20 12:36:45.70 SQaIR8ej.net
演算子だから、変数でもいいよ。

761:デフォルトの名無しさん
14/04/20 14:34:12.09 YSeiuWKu.net
式が書けるね。
$ は一番優先順位が高いから、かっこで括らにゃいかんが。

762:デフォルトの名無しさん
14/04/20 15:12:13.25 k3tDznaJ.net
今はじめて知った。haskellの$は演算子だって知ってたけど、awkでも演算子だったんだね。

763:デフォルトの名無しさん
14/10/14 13:37:28.35 cBz5RbAX.net
そして半年近く書き込みが無かった

764:デフォルトの名無しさん
14/10/15 03:28:03.90 SS4U/DMU.net
いやawkスレなんて普段はそんなに話題ないだろ

765:デフォルトの名無しさん
14/10/21 15:46:10.36 TQsAGJgk.net
質問させてください

今ディレクトリ内のファイルの名称とサイズのリストを作りたいと思っています
コマンドとしてはls -lを実行していますがこれをさらにawkにパイプしています
ただしファイル名にスペースが含まれているため以下のような苦肉の策をとっておりますが

ls -l | awk '{print $5 "\t" $9$10$11$12$13$14$15$16$17$18$19}'

10個以上で区切られてる可能性もあるため根本的な対応をしたいと考えていますが
よい案はありますでしょうか

766:デフォルトの名無しさん
14/10/21 17:25:55.68 EsuQiv22.net
# ファイル名に「"」が含まれていたら知らね。
ls -Ql |awk '{split($0, foo, "\x22"); print $5 "\t" foo[2]}'

767:デフォルトの名無しさん
14/10/21 23:41:50.65 stXOK2Vv.net
Qオプションは勉強になった
ls -l|awk '{s=$5;for(i=1;i<9;i++)$i="";print s"\t"$0}'

768:名無しさん@そうだ選挙に行こう
14/12/13 17:07:55.12 8LbgKkKk.net
¥034  は ” (半角)
¥035  は # (半角)       でおkですか?

769:名無しさん@そうだ選挙に行こう
14/12/13 18:17:16.35 FQOeA8KF.net
>>759
いいえ違います。

770:デフォルトの名無しさん
14/12/14 00:00:31.34 7YfznIJB.net
どちらも非可読文字ですね。そしてそうなるとスレ違い。
awkと絡むのなら具体的にどうぞ。

771:デフォルトの名無しさん
15/02/03 10:36:52.13 Dvc0nyMp.net
Terastationのファイル・ホルダ名に使うとファイルレプリケーションでエラーが起こる文字があって、それを変換するバッチを生成する時にこのマイナー言語が大活躍した。
約80万件のファイルホルダ名から抽出するのに10分程度だった。

772:デフォルトの名無しさん
15/05/26 00:18:03.33 Y5HiR/XE.net
Gawk4.1.2が出たなあ、と思ってたらすぐ4.1.3が出た。
素人には違いがあまり分からんのだが。

773:デフォルトの名無しさん
15/05/31 09:20:55.82 PB6Yeih1.net
URLリンク(www.amazon.co.jp)実践入門-Software-Design-plus-中島/dp/477417369X
新しい本、出たんだな
廃れないのが凄い

774:デフォルトの名無しさん
15/06/03 20:45:34.22 vBAc8MUN.net
>>764
買ってきた。まだ最初の方と最後の方を眺めただけだけど。
ページiv(「はじめに」)でawkの表記について「本書内では、いずれの
場合もすべて小文字のawkという表現に統一しております」と
あるのに、書名がAWK。
巻末のリファレンスで気になったところ。
演算子の優先順位に触れていない、フィールド演算子が
「特別な意味を持つな変数」の中に入れられている。
参考書や文献がないけど、今時は「ネットでググれ」かな。

775:デフォルトの名無しさん
15/07/06 22:02:56.12 Wnwr3Nh9.net
Mono: Playback -9707 [5%] [-97.07dB] [on]
上の行からパーセントを除いた数字(上の例だと5)を取得したいのですがどのようにしたらよいでしょうか?
パーセントの値は0から100の整数だと思います

776:デフォルトの名無しさん
15/07/07 15:47:02.78 NFKuqu84.net
# $0 に入っているとして
sub(/%.*/, "");
sub(/.*[^0-9]/, "");

777:デフォルトの名無しさん
15/07/08 11:55:27.32 rptAPQZX.net
awk -F"[%[]" '{print $2}'
ではまずい?

778:デフォルトの名無しさん
15/07/08 18:52:19.39 GgkVcZ7j.net
>>767,769
ありがとうございました
どちらでも希望の結果を求めることができました

779:デフォルトの名無しさん
15/07/10 10:45:11.15 VcZTZ3UB.net
テンプレである筈の1が読めないんだが、このスレ的にはPOSIXで書くのが
正統?普段はGawkしか使わないので一応確認。

780:デフォルトの名無しさん
15/09/18 18:16:27.97 RqA0Le8+o
アホじゃないエイホだ

781:デフォルトの名無しさん
15/10/10 22:36:33.12 1AEUTcmG.net
awk の a は、aho の a
ただし、エイホと読むらしい
へぇーーーーー

782:デフォルトの名無しさん
16/02/12 17:12:05.45 VH2jVHwT.net
awk使ってるシェルスクリプト見ると逃げてるなあと思う

783:デフォルトの名無しさん
16/02/18 00:13:16.92 E3KgV2Kz.net
普通は x[3]=5 と書くが、=なしの
x[3]
だけでもエラーとならず、x を配列として確保し、length(x)=1 になるのを発見
まあ、あまり必要ないけど

784:デフォルトの名無しさん
16/02/18 23:58:18.64 kHIvdCfG.net
まあ、gawkのマニュアルでも代入の前に参照が出てくるし

785:デフォルトの名無しさん
16/02/20 00:57:58.12 OTE8dQpJ.net
そうでしたか、新発見でなかった

786:デフォルトの名無しさん
16/02/20 15:01:09.40 91Q+YYwH.net
代入前にうっかり参照してしまうのは稀に良くある。

787:デフォルトの名無しさん
16/02/28 01:02:06.47 Atbyv4Wk.net
IGNORECASE=1
をBEGIN の前に置いてもエラーにならず、不可解動作
セキュリティ的にやばくないの

788:デフォルトの名無しさん
16/02/28 02:01:41.85 2mMmSiU+.net
>>778
BEGIN セクションを先頭に書けとは何処にも書いてない。
BEGIN を最後に書いても END を最初に書いても問題は無い。
何処に書いても、実際には先頭行読み込み前、各行読み込み時、最終行読み込み後にそれぞれ
パターンマッチが行われている。
ただマッチする条件が特殊だから、先頭か最後でしか中の文が実行されないだけ。

789:デフォルトの名無しさん
16/03/29 09:03:58.15 /c8bAcK4.net
サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
URLリンク(www.youtube.com)宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート

790:awk命
16/05/10 10:11:56.15 qP72K9YB.net
mawk32.exeで「multibyte char」のメッセージがでて困ってます、何が原因でしょう?
抑止する方法はありますか?
multibyte指定のコマンドラインオプションは無いようなのですが?

791:デフォルトの名無しさん
16/05/10 13:22:33.71 pT7b4QGj.net
UTF-8 が使えないのかも

「mawk multibyte char」で検索!

792:awk命
16/05/11 00:10:08.64 EkexSAUH.net
>782

データもプログラムもSJISです。
何に反応して multibyte charが出続けるのか不明です。
gawk高速なので満足なのですが、STDERRに multibyte charがで続けるのでうざいし、この出力ぶんだけ速度も低下?

793:デフォルトの名無しさん
16/05/11 00:13:30.76 Qn6YFszJ.net
入力にSJISでない文字が混在していることない?
nkf -s 入力ファイル | awk
で変換したら

794:デフォルトの名無しさん
16/05/11 03:47:08.47 6KznZIvs.net
コードを教えて下さい。
チャレンジしましたが、これではダメです。。
(for i=1, i<=NF, i++){
if $i<0{$i=0}
}
print $0


したいことは、下記のような行列の数字があって、負の値をゼロに置換したいです。

▼元の行列
3 15 6 1
-5 4 0 2
8 9 -7 11

▼やりたい変換�


795:繧フ行列イメージ 3 15 6 1 0 4 0 2 8 9 0 11



796:デフォルトの名無しさん
16/05/11 04:14:37.49 gi9ycYMA.net
構文がぜんぜん駄目。
{for(i=1;i<=NF;i++)if($i<0){$i=0};print $0;}

「したいことは、~したいです。」の構文も駄目。典型的なねじれ文。

797:デフォルトの名無しさん
16/05/11 07:39:07.59 E3fj3Ww+.net
Ruby, Python などを使えば?

798:デフォルトの名無しさん
16/05/11 12:31:52.37 ZhRn3EDd.net
>>787
Ruby, Python スクリプトを提示してみろよ。

799:デフォルトの名無しさん
16/05/11 22:58:11.78 Lckmn9CP.net
>>786
ありがとうございます!出来ました!

(一行プログラミング!awk便利ですね)

800:デフォルトの名無しさん
16/05/13 01:56:22.83 VtzDMLxe.net
awk じゃなくてもいいんなら

$ sed 's/-[0-9][0-9]*/0/g' ...

GNU sed なら

$ sed -r 's/-[0-9]+/0/g' ...

でええんちゃう?

801:デフォルトの名無しさん
16/06/14 11:25:33.91 ddY9aluRD
switchないのね

802:デフォルトの名無しさん
16/06/22 00:21:13.08 X+fwM1CQ.net
かまぷ 「『シェル芸』に効く AWK処方箋」

エイホ先生「AWKって使い捨ての言語(中略)プラスアルファの処理がやりたいよね。
ただその処理はとても簡単な処理でいい。そこに対して新しいプログラム言語を作っていきたい」

AWKブーム第1世代は「アイドル辞書」で学んだ―日本GNU AWKユーザー会 斉藤さん (1/5):CodeZine(コードジン)
URLリンク(codezine.jp)
2016/06/15 14:00

803:デフォルトの名無しさん
16/06/22 23:46:54.12 P+7nG182.net
やたらと続きは登録して読めと言われてもなあ。
このスレが立った頃からJGAUCのHPが更新されていないってのも凄い。

804:デフォルトの名無しさん
16/08/27 09:20:46.26 2q8s4uQl.net
Windows版のgawkで遊んでたら
for (i=0; i<n; i++) より
for (i=0; i<n; i+=1) のほうが
実行時間が短くなることに気づいた
なんだこりゃ

805:デフォルトの名無しさん
16/09/13 23:56:36.77 mfLTwPLq.net
for(i=1;i<=1000000;i++){a[i]=1}

for(i=1;i<=1000000;i++){a[i]=sprintf("1")}
結果は同じはずなのに、後者は異常にメモリを食う!ふしぎ!

806:デフォルトの名無しさん
16/09/14 00:22:19.58 YCeX8Gov.net
同じじゃないぞ。数値と文字列だ。
ところで、君が使ってる awk はどれ?

apropos awk

ってやってみたら、こんなん出てきた。

gawk (1) - パターン検索・処理言語
igawk (1) - インクルードファイルを使う gawk
a2p (1) - Awk to Perl translator
awk (1) - pattern scanning and text processing language
English (3perl) - use nice English (or awk) names for ugly punctuation v...
mawk (1) - pattern scanning and text processing language
nawk (1) - pattern scanning and text processing language

807:デフォルトの名無しさん
16/09/14 22:01:59.31 DqYC5LBT.net
>>796
例が悪くてスマソ、Cygwin上でgawk4.1.4使って
for(i=1;i<=1000000;i++){a[i]="1"}

for(i=1;i<=1000000;i++){a[i]=sprintf("1")}
でループ脱出直後のメモリ使用量を比較すると
上が60MBytes、下が600MBytesとかになった

cmdで動くgawkの3.1.7でも同じような差がでた
Linuxは試していないけど、もし大丈夫ならWindows版の問題かも

808:デフォルトの名無しさん
16/09/14 22:50:10.30 PWB0Awgu.net
>>797
OSX El Capitan
gawk 4.1.4

それぞれBEGIN{}に入れたスクリプトを読み込ませて実行。
で前者数十MB、後者3GB超までメモリ使った(アクティビティモニタ)。

809:795
16/09/14 23:40:38.22 YCeX8Gov.net
やってみたよ。環境は Debian jessie。
テストプログラム

#!/usr/bin/perl -w
use strict;
{
my $do_ps = 'system("ps p $PPID o pid,sz,args")';
foreach ( 1,'sprintf("1")'){
system('gawk',"BEGIN { for(i=1;i<=1000000;i++){a[i]=$_} $do_ps;}");
}
}

実行結果

PID SZ COMMAND
7389 7693 gawk BEGIN { for(i=1;i<=1000000;i++){a[i]=1} system("ps p $PPID o pid,sz,args");}
PID SZ COMMAND
7392 158116 gawk BEGIN { for(i=1;i<=1000000;i++){a[i]=sprintf("1")} system("ps p $PPID o pid,sz,args");}

KB 単位らしいから 8MB と 160MB 。ただごとじゃない差だね。
1 を "1" に変更してもこんな感じだから数値と文字列の差というわけではなさそう。

810:デフォルトの名無しさん
16/09/14 23:49:14.48 YCeX8Gov.net
ごめん、書き忘れた。

GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
Copyright (C) 1989, 1991-2014 Free Software Foundation.

811:デフォルトの名無しさん
16/09/17 08:30:37.61 didBD5ba.net
よく考えたら、メモリの使用量自体じゃなくて、それがどれだけ増えたかが重要だね。
そして、連想配列の構造体とキーに必要な量はどのケースでも同じと考えられる。
つまり、連想配列の要素のための量がどれだけ違うかを直接知ることができるはず。
というわけで、もう一回テスト。

URLリンク(ideone.com)

812:デフォルトの名無しさん
16/09/17 08:32:42.20 didBD5ba.net
実行結果

element before after diff
1 5685 7691 2006
i 5685 29226 23541
sprintf("%d",i) 5685 158124 152439
sprintf("%d",i) + 0 5685 29221 23536
sprintf("%d",i) "" 5685 37026 31341

1000000 要素の配列で 2MB って、いったいどうやってるんだろう。少なすぎる。
sprintf("%d",i) が突出して多いのは sprintf で多めに確保して
切り詰めたりせずにそのまま使ってるのだろうか。
さあ、gawk のソースコードをハックしてみるか!

813:デフォルトの名無しさん
16/09/17 14:11:27.89 IIH0ZjSk.net
推測だけど、stream, yield, callback、遅延処理かも

データをバッファサイズ分だけ読み込んで処理して、
次のコマンドへ送ったら、それを捨てて、次のデータを読み込むのかも

この方式だとメモリは、バッファサイズ分だけしか使わない

814:デフォルトの名無しさん
16/09/18 10:41:36.96 6jI6cHER.net
ベクターに公開されてるgawk3.1.5(と非公開の3.1.7)、ヘンテコな処理が見つかったのでメモ
このgawkのsystem関数を実行すると、環境変数TMPが指してるフォルダに
@echo off
system関数の引数
という2行が書かれたバッチファイルpip?.bat(?はsystem実行回数+1)というのが作成され

815:デフォルトの名無しさん
16/09/18 10:44:42.56 6jI6cHER.net
・・・いっぺんに書こうとしたらハネられるorz

816:803
16/09/18 10:46:32.08 6jI6cHER.net
(続き)
それを/c pip?.batで起動、完了後にpip?.batを
削除という流れでコマンドが実行される

817:803
16/09/18 10:47:07.98 6jI6cHER.net
(続き)
system関数を使ったスクリプトを同時に1つしか実行しないなら良いけど
2つ以上実行したときはタイミング次第でpip?.batの数字がぶつかり、先に実行した側が
・ コマンドが実行されない
・ コマンドが実行されるけど、完了後に「バッチファイルが見つかりません」が吐かれる
という結果になる

予めcmdの窓ごとにTMPを変えておけば問題ないけど面倒くさい
コマンド | getlineで起動したほうが手っ取り早いと思う
(ただし出力が2KBytes溜まると止まるから適宜リダイレクトする)

でも何でこんな方法でsystem関数を実装したんだろうね(´・ω・`)

818:デフォルトの名無しさん
16/09/18 13:53:41.51 EIh/dcA1.net
tmpfile を使えば、他と重複しない、ランダムな名前のファイルを作れるのに、

どうして使わないのだろう?

819:デフォルトの名無しさん
16/09/18 14:54:02.97 KtcAr9oX.net
MS-DOS ではね、コマンドラインの長さの制限が厳しかったんだよ。驚くなかれ、たった 128 バイトだ。
そんな環境では、バッチファイルにすれば実行できるけど

command /c "prog arg1 arg2 ..."

では command /c のせいで制限を越えるということもあるだろう。つまり、そういうことだ。
………冗談だ。確かにそういう制限はあったけど。
現在はもう system 関数ではそういうことをしていないということが ChangeLog に書かれてるよ。

2014-01-15 Eli Zaretskii <eliz@gnu.org>
* popen.c (os_system): Use spawnl, and quote the command line, to be consistent with what gawk_popen does.
(os_popen) [__MINGW32__]: Don't scriptify the command, to be consistent with gawk_popen.
(os_pclose) [__MINGW32__]: Update to match os_open: no need to unlink the script file.

820:デフォルトの名無しさん
16/09/18 15:07:54.47 KtcAr9oX.net
でもソースコードを見るかぎり、パイプではそういうことをしてるみたいなんだけど……
ちょっと試してみてくれないかな。

system("dir") | getline

みたいな感じ? よく知らないけど。

821:803
16/09/18 16:19:12.82 6jI6cHER.net
コマンド | getline で起動する場合はpip?.batは作られませんでした
system関数だけpip?.bat経由の模様
klabaster版のwindows用gawk4.1.3だとsystem関数がpip?.batを
作らなかったから、ベクター版固有の動きかなあと思います

822:デフォルトの名無しさん
16/09/18 17:46:00.36 KtcAr9oX.net
ありがとうございます。
gawk-4.1.1 の pc/popen.c を見た限りでは gawk の system 関数でバッチファイルを作るのは MINGW 限定で、
ChangeLog には問題が解消されたから直接 spawnl で実行するようにしたと書かれているわけですが
gawk のパイプ処理を実行している(と思われる) os_popen 関数ではバッチファイルを作るときと同様に
tempnam 関数でファイル名を作った上で、そのファイルを経由して受け渡しをしているように見えます。
これは MS-DOS の時代から使われてるやり方で、パイプのように見えてもパイプではありません。
このやり方だと gawk で

while (( command | getline) > 0)

と書いても実質的には

system("command > filename"); while (( getline < "filename") > 0)

と同じことになります。
あくまでも 4.1.1 の pc/popen.c の os_popen 関数がそう見えるというだけで、実際には違うかもしれませんが
自分で試すことができません。そもそも 3.1.5 のソースコードってどこにあるの?
もし勘違いじゃないなら >>807 と同じ問題が起こりそうな気が……
Linux を使ってる自分には関係ないといってしまえばそれまでですが。

823:デフォルトの名無しさん
16/09/18 19:56:17.75 zTPoEkjL.net
>>812
vectorの配布ファイル内のreadmeにはソースコードの
公開場所を探してるとか、直接連絡すれば渡すとか書いてある。

Windows版、NTあたりから一時ファイル作らずにパイプ動作するように
なったとか、どこかで読んだ気がするけど。

824:デフォルトの名無しさん
16/09/18 22:03:20.37 KtcAr9oX.net
謎は解けた。
ファイルを使ってデータを渡すのはマクロ __DJGPP__ とマクロ __MINGW32__ が
いずれも定義されていない場合らしいです。
Vector のは MINGW なので該当しません。お騒がせしました。

825:デフォルトの名無しさん
16/09/19 11:56:06.00 iIvzjj/t.net
ファイルを経由していても、ストレージに書き込むとは限らない

メモリ上だけに存在する、ファイルもあり得る。
LinuxのRAMディスク、tmpfs とか

826:803
16/09/19 14:26:19.66 fDWhtT6v.net
>>812
情報ありがとうございます。>>804で書いた「ヘンテコな処理」をpc\popen.c内に確認できました。
scriptify関数のtempnam呼んでるところでプロセスIDもつけるなり、細工したいなあ・・・

827:デフォルトの名無しさん
16/09/20 17:00:26.41 RIxgZ1yj.net
先日アクセスできなかった GNU のサイトが復活してたので 3.1.5 のソースコードを入手できました。
やっぱり os_popen からも scriptify を呼んでたみたいですね。4.1.1 のソースコードじゃ判りませんでした。
一応 chdir はアトミックな処理のはずなのでリスク回避に役立つと思いますよ。それ以外に方法がなければ。
chdir したら rmdir も忘れずに。

828:デフォルトの名無しさん
16/09/20 17:06:03.57 RIxgZ1yj.net
間違えた。chdir じゃなくて mkdir です。

829:デフォルトの名無しさん
16/09/22 12:11:24.09 nnsRF/zz.net
>>795
どうやら >>802 で想像した通り sprintf の仕様らしい。
本体は builtin.c の format_tree 関数らしい。
最初に 512 バイト確保したバッファは大きくはなっても小さくはならない。
実際の文字列に合わせて確保しなおしたらどうなるか >>801 のテストをしてみたよ。

改造前
element           before  after  diff
1               2753  4757  2004
i               2753  22357  19604
sprintf("%d",i)        2753 151283 148530
sprintf("%d",i) + 0      2753  22376  19623
sprintf("%d",i) ""      2753  30174  27421

改造後
element           before  after  diff
1               2753  4757  2004
i               2753  22357  19604
sprintf("%d",i)        2753  30174  27421
sprintf("%d",i) + 0      2753  22373  19620
sprintf("%d",i) ""      2753  30230  27477

あれ? jessie の gawk と比べてメモリの使用量が少ない。
-DDEBUG 付きでコンパイルしたから増えるかと思ったのに。
まあ、それ以外は一応予想通りではある。

830:デフォルトの名無しさん
16/09/22 23:15:31.17 SYBS8P/o.net
>>794とか
文字列の連結は "A" "B" よりもsprintf("%s%s", "A", "B") の方が速いとか
gawkって結構クセありますね

831:デフォルトの名無しさん
16/09/23 02:39:22.63 o4qLonoN.net
>>820
> 文字列の連結は "A" "B" よりもsprintf("%s%s", "A", "B") の方が速い
マジか。逆だと聞いていたが。

832:デフォルトの名無しさん
16/09/23 16:06:39.19 Y+5MXC/e.net
そんなバカな……と思ってやってみた。

URLリンク(ideone.com)

jessie 用のパッケージによる実行結果。

i++         6.15614
i = i + 1      6.02501
cat " and " dog   13.0163
sprintf       19.1612

インクリメントと足し算の差は有意とは思えない。
連結と sprintf の差は多分、倍くらい。
sprintf の中の複雑さを考えれば意外と差は小さいといえる。
フォーマット文字列が定数なら正規表現みたいにコンパイルすれば
高速化できる……のかなあ? 自分でやってみようとは(今はまだ)思わない。

833:デフォルトの名無しさん
16/09/24 23:15:47.76 +IiHRmp0.net
Windowsで使えるawkでUnicodeを正しく処理できる(length("あいう")で3が返ってくる)ものは
Cygwin版とVector版以外に無いでしょうか?

834:デフォルトの名無しさん
16/09/25 10:08:34.07 BH82R274.net
何があったんですか?

URLリンク(tanimoto.to)

に書かれているようなことですか? 別の選択肢も一応あるみたいですが。
トランスレータでもいいなら Perl に a2p が同梱されてます。

835:822
16/09/25 14:28:36.60 MNlfsMjx.net
特に困りごとは無いのですが、最新のVer4.1.4やその近辺のバージョンで
Unicodeが正しく処理できるものがあれば、今使っているBruce版3.1.7から
乗り換えたいなあと思いまして。

↓の5年前に書かれた記事の頃より選択肢が増えたりしてたら嬉しいなと・・・。
URLリンク(blog.livedoor.jp)

836:823
16/09/26 09:17:05.22 bhAuZr+w.net
理解しました。全滅だったんですね。
Windows での事情は存じませんが、こちらでも取り急ぎ gawk 3.1.5 を make してみました。
ところで、そのページのテスト3は不十分です。
UTF-8 でのパターンマッチは通常文字の誤マッチは原理的に起こりません。起こったらバグです。
だから、UTF-8 に対応しているかどうかをテストするために
sub(/.う/, "U")
というようなものを入れて試してみました。
今ビルドしたばかりの gawk 3.1.5 と jessie のパッケージの gawk 4.1.1 がこのテストに合格しました。
mawk 1.3.3 もインストールされてましたが、こちらはマルチバイト文字に対応していないようです。

さて、結論です。
シフトJIS に対応しているとされるものは避けた方がいいと思います。
余計な改造はしない方が信頼性は高いでしょう。
length がバイト数なのは、単にマルチバイト文字非対応でコンパイルされてるからだと思います。
マルチバイト文字対応版を誰かがリリースしてくれるのを待つか、自分でコンパイルするかですね。

837:デフォルトの名無しさん
16/09/27 17:33:47.16 Icjzq3KF.net
Linux では環境変数 LANG に UTF-8 が入ってないと期待通りに動いてくれません。
正確には LANG というより LC_CTYPE ですが、それはおいといて。
もしかしたらと思って、自分には無用だと思ってた Wine で klabaster gawk 4.1.3 を動かしてみました。
ところが、正規表現にマルチバイト文字が現れた時点で怒られます。
どうやら LANG が無いか、LANG=C じゃなければマルチバイト文字を使えないようです。
そして結局、正規表現の . や length を UTF-8 モードにする方法は見つけられませんでした。
記事のコメントには LC_ALL=ja_JP.UTF-8 で動くって書いてあるのに。
ひょっとして、Windows では原理的にできないということ?
これはいよいよ a2p が現実的な選択肢か?
……と思ったら、出力する Perl コードが間違ってます。

もう降参です。UTF-8 対応の gawk をお望みの方には Linux への引越しを強くお奨めします。

838:デフォルトの名無しさん
16/09/27 18:24:36.25 JiNhKH2a.net
cygwinやmsys2のgawkを使うのはだめなの?

839:デフォルトの名無しさん
16/09/27 18:34:39.64 BPXrtVfk.net
Windows Subsystem for Linux (WSL)では、Ubuntu64の実行ファイルが動く。
Linux API を、Windows API へ変換して呼び出す

Ubuntuのパッケージも、apt-getでインストールできる

840:デフォルトの名無しさん
16/09/27 19:26:43.05 Icjzq3KF.net
だめというか、見つけられなかった。
ただでさえ Windows のことなんか知らないんだからこれ以上無理。
いい方法を知ってたら教えてあげて。

841:デフォルトの名無しさん
16/09/27 19:51:11.26 Icjzq3KF.net
Cygwin は試してみたけどインストーラに丁重にお断りされたよ。

842:822
16/09/27 23:10:22.59 eGFFwbsN.net
たくさんの情報ありがとうございます。現状でWindowsに拘るなら、Bruce版3.1.7を継続して
使用するか、Cygwin版に乗り換えるか、Windows Subsystem for Linuxで動作させるかの
いずれかになりそうですね。

CygwinやWindows7でのWindows Subsystem for Linuxは、どちらも別途インストールが必要
とのことなので、職場の自PCはともかくスクリプト配布先に(スクリプトを動かすためだけに)
導入してもらわないといけないのはちょっと難しそうです。
Cygwinの導入状況とWindows10への切り替え時期の様子を見つつ、しばらくBruce版3.1.7を
使うことにします。

843:デフォルトの名無しさん
16/09/28 07:26:06.87 6NcLFLen.net
実は方法が無いわけではない。シングルバイトモードならできる。でも本当にやりたい?
本当に真剣に必要としているなら、このスクリプトでテスト3をやってみてほしい。

{
  c = "[\\000-\\177]|[\\340-\\357][\\200-\\277][\\200-\\277]"
#  print( length($0));
  str = $0; print( gsub( c,"0",str));
  print;
  sub(/<tag>/, "");
  sub(/<\/tag>/, "");
  sub(/hello/, "ABC");
#  sub(/.う/, "U");
  sub( sprintf("(%s)う",c),"U")
  print;
}

844:デフォルトの名無しさん
16/10/01 22:37:26.49 apxhHWta.net
やっぱり klabaster gawk はよく解らない。

$cat u2.awk
{
  print( length($0))
  sub(/う/, "U")
  print;
}
$LANG=C wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
$LANG=ja_JP.EUC-JP wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
$LANG=ja_JP.UTF-8 wine ../gawk64.exe -f u2.awk u2.txt > /dev/null
gawk64: u2.awk:3: sub(//, "U")
gawk64: u2.awk:3: ^ unterminated regexp
gawk64: u2.awk:4: sub(//, "U")
gawk64: u2.awk:4: ^ unexpected newline or end of string
$

UTF-8 で「う」は 3 バイトだから、シフトJISで解釈した結果
その後ろの / もマルチバイト文字の一部になるのだろうか。
いや、UTF-8 で解釈してくれないことに文句を言いたいんじゃないんだ。
UTF-8 で書いてあるのになぜ LANG=ja_JP.UTF-8 の時だけエラーになるのだろう。

845:デフォルトの名無しさん
16/10/02 00:14:27.80 lSw/Qfuv.net
この記事を見るかぎりではklabaster以外のWindows版gawkでもダメっぽいです
URLリンク(groups.google.com)

846:デフォルトの名無しさん
16/10/08 21:51:54.06 66+5bUgM.net
>>748からのレスで、$が演算子だったの? というようなところが気になって
少し調べてみた(調べたというほどの作業はしてないか)。

まず書籍。手持ちの数冊で確認。
『プログラミング言語AWK』(トッパン 初版第7刷)
さいごのまとめで演算子一覧に記載。本文中(p8)では「欄は常に$1,$2のように
参照しなくてはいけないと思われているかもしれないが、実は$のあとには,欄の
番号を指し示すための任意の式を書いてもよい」と書かれている。また、p46には
「欄変数」の項に「入力行の欄(field)は,$1,$2から始まって,$NFという名で呼ばれる」
との記述がある。

『sed & awk プログラミング』(アスキー出版局 初版)
旧版。本文中(p212)で「フィールドを参照したいときには、フィールド演算子$を使えばよい」
また(p217)で「フィールドを参照するにはドル記号($)演算子を使う」、Appendix(p471)で
「それぞれのフィールドは、$1ならば最初のフィールドの値を参照し、」と表現されている。
Appendixの演算子一覧に記載。

『AWKを256倍使うための本』(アスキー出版局 初版)
Appendixで演算子一覧に記載されているが、本文(p65)で「分解された各フィールドは、
$nという変数(nは、始めのフィールドから順に1,2,3...となる。もちろん即値の代わりに変数を
指定することも可能だ)でアクセスすることができる」とある。他の箇所でも$n変数と書いてある
ところがある。p66で「各フィールドを表す$nであるが、なぜこんな名前になっているかご存じだろうか?
実はこれもUNIX文化からきているのだ。UNIXの代表的なシェルであるshやcsh(最近ではkshや
tcshかな?)のシェルスクリプトのなかでコマンドラインパラメータを表す変数として$nが使用されて
おり(中略)これにあわせてawkで$nが使用されているようなのである」と書いてある。

『AWK実践入門』(技術評論社 初版)
>>765にあるように特別な変数として扱われており、リファレンスにも$が演算子で
あることの記載がない。
(続く)

847:835
16/10/08 22:00:44.45 66+5bUgM.net
(続き)
ネットの情報。2016.10.8現在。
Gnu Awk ユーザーズガイド/The GAWK Manual/Effective AWK Programming
gawkの解説書。バージョン違いがあるようだが、翻訳版で目に留まったもの。
「定数でないフィールド番号」の項で「あるフィールドを参照するために、awk言語での任意の式を
`$'の後で使うことができる」と記述されている。「演算子の優先順位」の項では演算子として
並べられている。

man gawk
翻訳版、リナックスコマンドというサイト(www.linux-cmd.com)から。
「入力レコード中の各フィールドの値は、左から $1, $2 等という名前で参照できます。
$0 はレコード全体です。フィールドに値を代入することもできます。フィールドは定数だけでなく、
変数によって参照することもできます。」となっている。演算子のところに記載あり。

AWK Users JP
サイト中「awk 基礎文法最速マスター」のページで「特殊変数」の項に$0,$1~$NFの説明。
フィールド参照の語はない。また、リファレンス的な演算子のまとめはない(?)。
ページ上部に「この文書は書きかけです」とあるので、未整備ということだろうか。

IBM Knowledge Center
awkコマンドのページ(www.ibm.com/support/knowledgecenter/ja/ssw_aix_71/
com.ibm.aix.cmds1/awk.htm)では「レコードとフィールドによるファイル処理」の項で
「各フィールドはフィールド変数によって参照されます。レコードの最初のフィールドには $1 変数、
2 番目のフィールドには $2 変数というように、変数が割り当てられます。」との記述。少しうしろの
方、「フィールド変数」の項でも「フィールド変数は、$ (ドル記号) とそれに続く数値または数値式で
指定します。」とある。$が演算子であることの記載はない。

てな感じで、『プログラミング言語AWK』でも「欄変数」という表現があり、誤解しそうな感じはする。
また、256倍本に書いてあるようにシェルスクリプト中のパラメータとして$nがあることから、$nが
(特別な)変数として認識されてしまっているのではないか、とも想像する。個人サイトのawkの解説
ページでは、$nという変数にフィールドが代入されると説明しているところもあった。そのように理解して
スクリプトを書いてもさして不都合はないだろうな、とは思うが。

848:デフォルトの名無しさん
16/10/08 23:11:50.50 ZMh6U7O9.net
広範な調査乙。Gawkのrefcardでもちゃんとoperatorに含まれているなあ。
演算子と明確に認識していなくても、$の後に式OKと思っていれば差し支えなさそう。

849:デフォルトの名無しさん
16/10/18 23:10:18.54 TQpGgbw6.net
gawk4で関数ポインタみたいなもんが追加されましたけど、これlengthとかsubstrの
組込み関数や@loadした自作dllの関数とかにも使えるんですね
案外便利かも

@load "hage.dll"
 BEGIN{
 kumi = "length"
 func = "hagefunc"
 ng[1] = "substr"
 print @kumi("ABC")
 print @func("彡 ⌒ ミ ")
 print @ng[1]("XYZ", 1, 1) # 配列越しに呼ぼうとしたらsyntax error・・・残念
}

850:デフォルトの名無しさん
16/10/21 17:10:59.85 MQQBNMPM.net
>>755
こういう過疎スレで無駄に突っかかってくるやつむかつくんだが死ね

851:デフォルトの名無しさん
16/11/23 00:01:26.03 bt3mTQnz.net
>>840
ブーメランかよwww

852:デフォルトの名無しさん
16/11/23 01:18:15.98 noM2Pdp3.net
\おはげだー!/

853:デフォルトの名無しさん
16/11/30 02:56:38.28 PeC/aWZc.net
URLリンク(imgur.com)

854:C初心者
17/02/28 13:18:15.09 Mb8mQo1M.net
awkスクリプトをCソースに変換してコンパイルするための「awka」というツールでできるだけ簡単にUTF-8サポートさせる方法を知りたいです。
ネットで散々調べましたがないようです?

855:デフォルトの名無しさん
17/03/02 00:28:53.73 CDxvUfiY.net
このスレも10周年か

856:デフォルトの名無しさん
17/03/05 09:28:55.73 EQCsqksH.net
>>844
それがあなたの現在の実力だったということです
お疲れ様でした

857:デフォルトの名無しさん
17/03/05 14:45:26.28 KmKKYedf.net
gawkに対応してるなら大丈夫ってことかな?
asciiしか考えていないなら、ソース全チェック…。
要するに、日本語化するんだろうけど。

全然別の言語変換にちょっと咬んだことがあるんだけど、
製品化しちゃってからダブルバイト考慮してないことがわかって、かなり面倒だった。

とりあえず変換してから、ソース見て直すほうが早かったり(笑

がんばってね。

858:デフォルトの名無しさん
17/03/06 11:39:31.22 FdaYmB9f.net
awkで $1,$2...$6 こんな出力を↓下にしたいんだけど どうすればいいですかね?
470230
470290

002347
002479

859:デフォルトの名無しさん
17/03/06 12:33:46.83 FW5jfGh1.net
GNU awk の asort() を使うとか。

printf '470230\n470290\n' |
gawk -vFS= -vOFS= '{
for(i=1;i<=NF;i++){
arr[i]=$i
};
asort(arr);
for(i=1;i<=NF;i++){
$i=arr[i]
};
print
}'

860:デフォルトの名無しさん
17/03/06 15:19:43.83 FdaYmB9f.net
ありがとう
gawk いれないでなんとかならないかな

861:デフォルトの名無しさん
17/03/06 17:28:40.15 FW5jfGh1.net
う~ん、そうなると awk を使わなくてもいいかな

printf '470230\n470290\n' |
while read -r n
do
echo "$n" | grep -o . | sort -n | tr -d '\n'; echo
done

862:デフォルトの名無しさん
17/03/06 19:23:27.89 08XsJPyW.net
>>841
だからブーメランとかそういうの関係ないから死ねって言ってんだろカス
死ね

863:デフォルトの名無しさん
17/03/06 19:24:30.15 08XsJPyW.net
>>845
粘着が10年位延命しても何もすごくねえよ
突っかかってきたぶちころすぞ雑魚死ね>>841

864:デフォルトの名無しさん
17/03/06 19:26:33.18 08XsJPyW.net
>>841
ブーメランとかじゃなくて死ねって言ってんだから死ねボケ

865:デフォルトの名無しさん
17/03/07 08:17:48.93 6Hf5Xh2e.net
お疲れ様でした

866:デフォルトの名無しさん
17/03/09 21:48:39.65 0T9qj2kA.net
連想配列で
echo '470230' | awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){a[$i]++}for(i=0;i<=9;i++){for(j=1;j<=a[i];j++){printf("%s", i)}}printf("\n")}'
002347

867:デフォルトの名無しさん
17/03/10 00:18:57.87 +B1nKlhG.net
既に否定されているがgawk4がもし使えたら
awk '{ORS="";PROCINFO["sorted_in"]="@val_num_asc";x=split($0,a,"");for (i in a)print a[i];print "\n"}'

868:デフォルトの名無しさん
17/03/10 04:05:38.25 wGo6zQ56.net
最近の gawk ならインクルードファイルが用意されてて join とか使えたり

gawk -vFS= -vOFS= -i join.awk '{split($0,a,"");asort(a);print join(a,1,length(a),SUBSEP)}'

869:デフォルトの名無しさん
17/04/04 22:35:43.00 9/WMFGSO.net
# gawk4の読込みタイムアウト機能、けっこう便利そう・・・だけどWindowsはCygwin版じゃないと使えない。残念無念。
BEGIN{
  PROCINFO["/dev/stdin", "READ_TIMEOUT"] = 180000
  print "3分間待ってやる"
  getline t < "/dev/stdin"
  if (t=="バルス") {
    print "ああ…ああ…目があぁぁぁぁぁ~!"
  }
  else {
    print "時間だ!答えを訊こう!"
  }
}

870:デフォルトの名無しさん
17/09/16 00:02:08.63 lO9EtkAG.net
自作の読込みパーサextensionでgz形式のファイルを食えるようにしてみたけど
パーサは一度にひとつしかロードできない設計らしく(ソースでそうなってた)
同じ読込みパーサ形式のxmlライブラリとは併用できなかった
ちょっと使いにくいなあ・・・

871:デフォルトの名無しさん
17/10/09 16:41:58.59 7/rU/a8H.net
4.2.0Betaあげ

872:デフォルトの名無しさん
17/10/16 14:34:21.07 tJ1aGDYb.net
ファイルの終端関係の謎のエラーに直面
「何で行末が欠ける?分からん、全然分からんぞ!」
と悶えていたら、
いつの間にかvimの設定が変になっていて、
書いたファイルがデフォで行末に\rが来る
ようになっていた。
brew でインストールvimインストールしたとき
妙な設定になったのか?
いやねawkのスクリプトで、
空フィールドが\rになったりとか
macOSなのに変だなあと思っていたのだが…
システム外vim使うときは要注意か。

873:デフォルトの名無しさん
17/10/16 14:41:37.20 tJ1aGDYb.net
うぉーっ、林檎のnumbersで書き出したCSVファイルが
DOS改行になっとる…罠だ

874:デフォルトの名無しさん
17/10/22 23:24:45.88 /qEHJ0vm.net
お疲れ様でした

875:デフォルトの名無しさん
17/10/22 23:26:23.47 /qEHJ0vm.net


876:href="../test/read.cgi/tech/1172242542/755" rel="noopener noreferrer" target="_blank">>>755 普段話題なく3年も続こうがべつにすごくないね



877:デフォルトの名無しさん
17/12/09 10:00:30.84 /kecouyU.net
BEGIN{for(i=1;i<=10000000;i++){printf "%08d", i > "test" } close("test)} の実行にかかる時間を
4.1.4と4.2.0で比較すると、4.2.0のほうが倍近く速くなってるね
fwriteのロックがどうたらの影響なんだろうけど

878:デフォルトの名無しさん
17/12/12 21:01:15.07 zxiueT/o.net
懐かしいなぁ。
AWKは自由に現実的な限度はあるけど、書いてて楽しい言語だった。

879:デフォルトの名無しさん
18/01/08 11:00:30.57 szpKYJOz.net
お疲れ様でした

880:デフォルトの名無しさん
18/01/12 00:18:25.22 8Bbkgawk.net
IDがgawkなので来ました

881:デフォルトの名無しさん
18/01/17 10:09:56.59 MoHAEd1l.net
AWKって基本的にUnicodeには対応してるんだよね。
GNUにしろBSDにしろ。

882:デフォルトの名無しさん
18/01/17 17:52:56.47 MoHAEd1l.net
置換函数の第二仮引数に[バックスペース][置換対象の文字列]みたいにしたい時は
gsub(/foo/, "\\\\&", $n)
ってしないといけないんだね。
gsub(/foo/, "\\bar", $n)
が foo -> \bar だったんで foo -> \foo は
gsub(/foo/, "\\&", $n)
でいいと思って半時程嵌った。

883:デフォルトの名無しさん
18/01/18 07:25:24.80 eRgrS92p.net
>>863
それ勧告に従っただけだと思うが。
URLリンク(www.ietf.org)

884:デフォルトの名無しさん
18/03/09 13:30:21.59 Yd19z7Tx.net
ある行に 20 と 34 とはいってる
この行ごと除外したいけど・・・
 

885:デフォルトの名無しさん
18/03/09 14:33:06.31 X3i0O3oy.net
grep -v ' 20 と 34 '

886:デフォルトの名無しさん
18/03/09 21:38:00.87 3i0y1Him.net
こうかな
gawk "$0!~/20|34/{print}"

887:デフォルトの名無しさん
18/03/09 23:45:36.30 Ejthnyow.net
AWK プログラムの基本構造となっている「パターンとアクションの対」のうち、
アクションが省略されている場合は入力行がそのまま出力される。
またパターンが単一の正規表現である場合は、その正規表現と $0 との照合が行われる。
gawk '!/20と34/'
gawk '!/20|34/'

888:デフォルトの名無しさん
18/03/10 21:39:17.88 NqpdHf3N.net
こぴぺしてやってみたけど 両方消えちゃうんだよね
20 と 34があった場合 出力しない
片方でもあれば 出力する
awk '!/01 / && !/03 /'  これも両方消えてる・・

889:なんか日本語がおかしいな。
18/03/11 06:07:55.06 rsmr5+n0.net
>>877
「20 と 34 を両方含む時だけ出力しない。片方だけの場合は出力する。」
そう言いたいのか?
gawk '!(/20/&&/34/)'

890:デフォルトの名無しさん
18/03/11 10:58:35.24 tN+YLJlR.net
ありがとう 
()はきがつかなかった・・

891:デフォルトの名無しさん
18/05/23 20:10:48.40 Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
0VDE5

892:デフォルトの名無しさん
18/06/08 22:00:41.48 W8HYHVfd.net
split関数より$0へ代入したほうが速いage

893:デフォルトの名無しさん
18/06/27 16:43:15.93 tzYH0Nnw/
そんなわけないw

894:デフォルトの名無しさん
18/07/04 22:29:02.55 gFgZc5FG.net
02P

895:デフォルトの名無しさん
18/07/05 16:52:56.22 AeL6VB/V.net
0VDE5

896:デフォルトの名無しさん
18/09/11 09:26:39.50 196Ukd9B.net
シェルスクリプト書いててどうしようもないときだけ使ってる

897:デフォルトの名無しさん
18/12/02 13:44:27.64 jISJOvCb.net
AWKって重いと勝手に思ってたけど下手にシェルで制御構文作るより早いね
尤もWSLでやってるのでforkの時間とかそういう問題かもしれないが。

898:デフォルトの名無しさん
18/12/02 14:22:41.55 Bx+z5yQP.net
>>886
重いと言ってもC比だからな。
今時の超大富豪言語PythonやRubyとなら同程度でもおかしくはない。
Cygwinのshが重かったのはご存じの通りforkが原因だ。
気になるならVirtualBox等でlinux環境を構築してその上でテストしてみればいい。

899:デフォルトの名無しさん
18/12/22 02:10:55.36 V7w17XLB.net
gawk4にて配列の配列に存在する全要素数を
カウントする関数を作ったんですが、
もっと早いコードにならないでしょうか?
どなたかヒントをください。お願いします。
function count_array(arr, n, i) {
for (i in arr) {
if (isarray(arr[i])) count_array(arr[i], n);
else n[0]++;
}
return n[0];
}

900:デフォルトの名無しさん
18/12/22 02:57:46.65 kZtDaodg.net
length(arr) でダメなの?

901:デフォルトの名無しさん
18/12/22 20:12:58.98 VPYzPSxJ.net
886です。
ダメなんです。
BEGIN {
a[1] = 1;
a[2][1] = 21;
a[2][2] = 22;
a[3] = 3;
a[4][1][1] = 411;
a[4][2] = 42;
a[4][3][2][1] = 256;
for (i = 0; i < 9; i++) b[i] = i;
c["foo"]["corge"] = "grault";
c["foo"]["bar"] = "garply";
c["baz"]["corge"] = "waldo";
c["baz"]["quux"] = "fred";
print "length(a) = " length(a);
print "length(a) = " length(b);
print "length(a) = " length(c);
print "count_array(a) = " count_array(a);
print "count_array(b) = " count_array(b);
print "count_array(c) = " count_array(c);
}
length(a) = 4
length(b) = 9
length(c) = 2
count_array(a) = 7
count_array(b) = 9
count_array(c) = 4
再帰を使う以外に方法があれば、
と思い質問した次第です。

902:デフォルトの名無しさん
18/12/22 21:58:49.47 b6CiPLFa.net
要素を追加するときに
ノード毎に集計値が必要ならそれぞれのノード毎の集計値を保存しとけばいい
そうすれば集計しなおす必要ない
超速いハズ
集計しないからな

903:デフォルトの名無しさん
18/12/22 22:19:10.29 b6CiPLFa.net
こういった集計値がほしいのは分かる
aho(9)
┣aho1(5)
┃┣aho11(3)
┃┃┣aho111(1)
┃┃┗aho112(1)
┃┗aho12(1)
┗aho2(3)
  ┣aho21(1)
  ┗aho22(1)
lengthでは、きっとこんな感じでしかとれない
aho(2)
┣aho1(2)
┃┣aho11(2)
┃┃┣aho111(n/a)
┃┃┗aho112(n/a)
┃┗aho12(n/a)
┗aho2(2)
  ┣aho21(n/a)
  ┗aho22(n/a)

904:デフォルトの名無しさん
18/12/22 23:48:44.15 omdhpVTe.net
>>890
lengthは、配列aの要素に配列があると要素としての配列の
中の要素数まではカウントしない、やりたいのは要素としての配列に
含まれる要素もカウントしたい、ということか。
function count_array2(arr, cnt, i) {
n=0;
for (i in arr) {
if(isarray(arr[i])){
cnt+=length(arr[i]);
}
else n++;
}
return n;
}
だと
a[1] = 1;
a[2][1] = 21;
a[2][2] = 22;
a[3] = 3;
a[4][1][1] = 411;
a[4][2] = 42;
a[4][3][2][1] = 256;
a[4][3][3][2] = 257;
みたいなのでうまくいかない(1番目と2番目の添え字(?)が同じ)。
arr[i][j]...と続ければ(最初にlength(arr)で続ける深さを決めて)
いけるように思うが、だったら再帰するのが素直か。

905:デフォルトの名無しさん
18/12/23 00:54:43.50 quoNoaXg.net
886です。889さんこんな感じでしょうか?
BEGIN {
addnode(a, "1-1", "start");
addnode(a, "1-2", "done");
addnode(a, "1-3", "result");
addnode(a, "1-4", "print");
addnode(a, "2", "count");
addnode(a, "3-1-1", "return");
for (i in a[1]) print "a[1][" i "] = " a[1][i];
print "a[2] = " a[2];
print "a[3][1][1] = " a[3][1][1];
print "\n_ele_sum = " _ele_sum;
}
function addnode(arr, i, val, p) {
ct = split(i, list, "-");
switch (ct) {
case 1: arr[list[1]] = val; break;
case 2: arr[list[1]][list[2]] = val; break;
case 3: arr[list[1]][list[2]][list[3]] = val; break;
default:
}
_ele_sum++;
}
a[1][1] = start
a[1][2] = done
a[1][3] = result
a[1][4] = print
a[2] = count
a[3][1][1] = return
_ele_sum = 6

906:デフォルトの名無しさん
18/12/23 01:05:13.25 quoNoaXg.net
886です。
pとか関係ないパラメータ入れてしまってごめんなさい。
addnode(a, "1-5-1", "connot");
これができません。
a["5"]がスカラーだと言っています。

907:デフォルトの名無しさん
18/12/23 01:15:19.57 quoNoaXg.net
訂正a["1"]["5"]がスカラーの文脈だと言っています。でした

908:デフォルトの名無しさん
18/12/23 01:41:32.84 quoNoaXg.net
886です
for (i in a[1]) print "a[1][" i "] = " a[1][i];
でa[1][5][1]が引っかかっていたようです。
自爆でした。すみません。

909:デフォルトの名無しさん
18/12/23 02:59:04.54 quoNoaXg.net
886です。
親ノード毎?に保存する方法がまだわかりませんが、
明日以降考えます。
みなさん、ご協力ありがとうございました。

910:デフォルトの名無しさん
18/12/23 08:49:07.73 S8HMq/6c.net
gawk4でとにかく速いのが良いならcで拡張関数作るのが良いかと(反則?)
flatten_array_typed関数(4.1.4はflatten_array関数)でawk_flat_array_t構造体のメンバ変数countに要素数が入りますので
要素がAWK_ARRAYなら再帰するように処理すれば出来上がり
APIの使い方は
extension\rwarray.cとか
URLリンク(www.gnu.org)を参考に
gawkだけでやる場合、もし配列の要素数が10万とか100万あるのなら、関数の引数を出来るだけ減らして
関数内からグローバル変数を直接参照したほうが速くなると思います

911:デフォルトの名無しさん
18/12/23 11:20:10.63 qffc/3mK.net
もともと添え字がすべて文字列で保存する仕様というのはしってはいたが
多次元配列はaho[i,j]という形式にして工夫して使えということらしいな
awkで多次元配列なんか使ったことないから知らんかったわ
とういワケでにその形式で多次元配列をlengthでとると>>888で取得したい値になる
当然といえば当然
特定の次元の列だけのとりかたはよくわからん とれんのかコレ
 URLリンク(www.kt.rim.or.jp)
 Using Numbers to Subscript Arrays
  配列について重要なのは、配列の添え字は常に 文字列として扱われるということである。
  配列の添え字に数字を使った場合、それは添え字付けに使われる前に 文字列に変換される
 URLリンク(www.kt.rim.or.jp)
 Multi-dimensional Arrays
  多次元配列とは、配列要素の指定を複数の添字の並びによって行う配列である。例え ば二次元の配列は二つの添字を必要とする。
  一般的な(awkも含めた大多数の 言語では) 二次元配列の要素に対する参照は grid[x,y]このよ うに行う。 (gridは配列の名前)
  セパレータには組み込み変数SUBSEPに格納 されている値が使われる。

912:デフォルトの名無しさん
18/12/23 11:43:46.94 7N3pX2Wi.net
>>900
それを踏まえて>>888
> gawk4
とわざわざことわっているんじゃないの?

913:デフォルトの名無しさん
18/12/23 22:29:12.74 qffc/3mK.net
まず入力から多次元配列を読込む処理でも作ってみるか
できるのかがよく分からん
コレがすんなりできないとコレ自体が使えるシロモノにならなそうだしな
テストデータは作ってみた
URLリンク(ideone.com)
awkのこの多次元配列についてほかのとこで書いてあるの読んでみると
色々と面倒なことがおきるはのは分かった
特に問題がおきそうなのは一度配列やスカラーで要素を追加すると、
その配列やスカラーを変えて上書きする場合明示的にそれを削除しないと上書きして使えない
きっとなノードを削除するときはその要素゙から辿って一番深いとこから再帰的に削除しないと残骸が残る
cのメモリリークと同じことが起きると推定される
いまいちこの多次元配列に使い道があるのかどうかが分からない

914:デフォルトの名無しさん
18/12/23 23:32:19.00 nM/PpEMV.net
lispが最適
awkは不適

915:デフォルトの名無しさん
18/12/24 01:01:19.83 ivcUrO89.net
URLリンク(ideone.com)
どうにかして動的に配列を構成できないか調べてみたが
やりかたが分からん
>>894の質問してるのが書いた方法で
一旦多次元配列を読む込むようにはしてみた
質問してるのが欲しいといってる要素の数は
結局入力の行数と同じになる

916:デフォルトの名無しさん
18/12/24 01:07:37.50 ivcUrO89.net
URLリンク(ideone.com)
switch分のcaseが1つ少なかったから追加しといた

917:デフォルトの名無しさん
18/12/24 09:11:50.63 PbNokzxn.net
>>902
> きっとなノードを削除するときはその要素゙から辿って一番深いとこから再帰的に削除しないと残骸が残る
delete a は a[1][2] や a[3][4][5] などの子配列含む配列a全体の使用メモリをまとめて "再利用" にまわす
一部の要素を残しておきたい事情が無ければ、delete a[1][2]; delete a[3][4][5]; ... のように子配列を個別に
deleteする必要は無い
たとえば下の(2)は多次元配列bが多次元配列aの使用済みメモリを再利用するので
終了間際のメモリ使用量は(1)(2)どちらも同じになるが、(2)の delete a を消すと倍程度に増える
(1) BEGIN{for(i=1; i<=1000000; i++){a[i%10][i]=i}}
(2) BEGIN{for(i=1; i<=1000000; i++){a[i%10][i]=i} delete a; for(i=1; i<=1000000; i++){b[i%10][i]=i}}
メモリ再利用の仕組みはThe GAWK Manualには書いていないけどAharon Robbinsが↓で回答している
URLリンク(groups.google.com)

918:デフォルトの名無しさん
18/12/24 15:58:51.02 ivcUrO89.net
なるほど
ありがとう
きっと再利用されるから
気にせず放置でいいのか

919:デフォルトの名無しさん
18/12/24 17:27:46.25 8PLVwc4u.net
>>904 886です。ありがとうございます。動的とはこんな感じでしょうか?
一度作って、削除するという変な仕様ですが。
BEGIN {
a[1] = "foo";
a[2][1] = "bar";
a[2][2] = "baz";
a[3] = "qux";
a[4][1][1] = "quux";
a[4][2] = "corge";
for (i = 1; i < 5; i++) {
meta_ar_init(b, i);
clone(b[i], a);
}
}
function meta_ar_init(ar, init_num) {
ar[init_num][1] = "";
delete ar[init_num][1];
}
function clone(lhs, rhs, i) {
for (i in rhs) {
if (isarray(rhs[i])) {
lhs[i][1] = "";
delete lhs[i][1];
clone(lhs[i], rhs[i]);
} else
lhs[i] = rhs[i];
}
}

920:デフォルトの名無しさん
18/12/27 20:01:48.39 pQqvXPza.net
よく分からんが
例えばそれで>>904の入力データなんかを読み込めたりするのか
>>905のswitchだと事前に何次元かわかってないと読み込めない
何次元になるか不明な入力データの場合
どうやれば格納できるかよくわからんんかった

921:デフォルトの名無しさん
18/12/27 22:46:53.38 X7jxTwwp.net
>>908の「一度作って、削除する」というのは
URLリンク(www.gnu.org)
ここの一番下のsplitがエラー吐く例の回避策で、配列の要素を最初から配列扱いすることはできないから
予め次階層にダミー要素をぶら下げておき、本命を格納し終えたらダミーは消すって意味かな
自分で書いたらこんなんなったけど、いちおう何次元でも格納できそう
URLリンク(ideone.com)

922:デフォルトの名無しさん
18/12/30 03:28:21.38 5ft+KBa+B
すごいけど配列の値が書いてないので
BEGIN {
array_entry(a, "1-2-3", 48)
array_entry(a, "1-2-4-6", 667)
array_entry(a, "3-1", 0)
array_entry(a, "4", 6)
array_entry(a, "5-1-2-3-4-5", -128)
process_array(a, "a", "do_print", 0)
}

function array_entry(a, val, ele       , step, b, n) {
n = split(val, b, /-/)
if (n == 1) { a[val + 0] = ele; return }
if (step == n - 2) { a[b[step + 1]][b[n]] = ele; return }
a[b[step + 1]]["dummy"];
if (step + 1 < n) {
array_entry(a[b[step + 1]], val, ele, step + 1)
delete a[b[step + 1]]["dummy"]
}
}つづく

923:デフォルトの名無しさん
18/12/30 03:29:15.30 5ft+KBa+B
function do_print(name, element) {
printf("%s = %s\n", name, element);
}
function process_array(arr, name, process, do_arrays,   i, new_name) {
for (i in arr) {
new_name = (name "[" i "]");
if (isarray(arr[i])) {
if (do_arrays)
@process(new_name, arr[i]);
process_array(arr[i], new_name, process, do_arrays);
} else
@process(new_name, arr[i]);
}
}
これでいけそう?

924:デフォルトの名無しさん
18/12/31 02:46:41.48 20SukTdNU
ちゃんと書いてみました。
URLリンク(ideone.com)

925:デフォルトの名無しさん
19/01/01 00:00:01.96 7rl7mk2H.net
2019年もawkのお世話になります

926:デフォルトの名無しさん
19/01/02 18:12:37.70 0+aicLseW
すげー

927:デフォルトの名無しさん
19/01/05 08:05:13.61 1ixBisDID
どなたか教えてください
Windows10-32bit,MinGW(msys無し),gawk4.2.1 for win32 bin/src(ezwinports),
Shift_JISの環境で builtin.c を書き換えてビルドしました。
書き換えた内容はprintf/sprintfのマルチバイト文字列整形関連です。
ビルド後、期待通りに動きますが、実行ファイルサイズが4.8MBもあります。
上記のソースディレクトリでcmdを起動して
mingw32-make mingw32
とタイプしました。
出来上がった gawk.exe のファイルサイズは正常なのでしょうか?
また、上記環境ではできませんが configure は必要ですか?
よろしくお願いいたします。

928:デフォルトの名無しさん
19/02/05 18:58:36.44 9Z2hbdGL.net
60くらいの教授が40年くらい前にAWKでアセンブラ作ったとか言ってたんだけど
当時に既にあったということと当時から小規模なコンパイラなら作れるくらい高性能だったことに驚いた

929:デフォルトの名無しさん
19/02/05 19:10:49.73 dIIT7BCG.net
アセンブラをコンパイラとは呼ばないが

930:デフォルトの名無しさん
19/02/06 10:31:17.59 +qagyc5o.net
aho

931:デフォルトの名無しさん
19/02/06 13:09:33.86 j4QdsmCl.net
asort、asortiがよくわからなかったので試した結果
# a
a[5] ="a5"
a[1] ="a1"
a[3] ="a8"
# asort(a,as)
as[1] ="a1"
as[2] ="a5"
as[3] ="a8"
# asorti(a,asi)
asi[1]=1
asi[2]=3
asi[3]=5
なんだそういうことだったのかとわかった

932:デフォルトの名無しさん
19/02/06 17:39:23.37 +3VpeZVh.net
>>917
思わず "assembler by awk" でググって The Amazing Awk Assembler by Henry Spencer を
ダウンロードしちゃったじゃないか。

933:デフォルトの名無しさん
19/02/23 17:41:13.06 Y0E0nwid.net
awkでファイルがあるかどうかの判別は、どのようにしたらよいのでしょうか?
具体的にはBEGINの中で
getline a < "/dev/stdin";
fn = a".txt"
と任意のファイル名を作った後、そのファイルがあるかどうかを確認したいんです。
もしファイルがすでにあったら処理は終了、無ければ以後の処理をそのファイルにリダイレクトする、という感じです。

934:デフォルトの名無しさん
19/02/24 00:16:02.91 Cwr1i6xY.net
if(getline<fn!=-1)exit
とか?

935:デフォルトの名無しさん
19/02/24 11:45:53.93 FuDjIOWV.net
>>923
できました!ありがとうございます!!

936:デフォルトの名無しさん
19/03/21 08:10:09.34 pGDO/F2C.net
答えが出ないなんで?
#!/usr/bin/awk -f
BEGIN{
print game(10, 24);
}

function game(coin,depth, i,j){
if(memo[coin,depth]){
return memo[coin,depth];
}
if(coin == 0){
return 0;
}
if(depth == 0){
return 1;
}
win = game(coin + 1, depth - 1);
lose = game(coin - 1, depth - 1);
memo[coin,depth] = win + lose;
}

937:デフォルトの名無しさん
19/03/21 09:51:18.96 WMaCNtBE.net
最後の memo[coin,depth] = win + lose はそのまま関数の戻り値として
return しなければならないが、それを忘れている。
さらに、正しい答えが返らない原因が 2 点。
関数定義の引数名間違い: i,j → win,lose。
if(depth == 0) と if(coin == 0) の判定を行う順序が逆。

938:デフォルトの名無しさん
19/03/21 14:19:16.55 pGDO/F2C.net
>>926
ありがとうございます。
そっか。returnがいるんですね。
perlだと最後はreturn省略可能だけどawkは省略不可みたい。
あと、引数名も間違っていました。
正しい答え出ました!

939:デフォルトの名無しさん
19/03/21 21:25:33.68 ZeSQsBE1.net
それぐらいの処理は、Ruby で作れ!

940:デフォルトの名無しさん
19/03/21 23:54:47.78 7AyLRSvD.net
オーク英雄物語 ~忖度列伝~
URLリンク(ncode.syosetu.com) 👀
Rock54: Caution(BBR-MD5:0be20a4887bc3d3353f527d3636c44e3)


941:デフォルトの名無しさん
19/04/01 17:01:28.78 nwflCE8J.net
>>928
awkの方がいいときもある
installしなくていい
タスクマネージャでみているとrubyよりメモリを食わない時もある
融通の利く配列が超便利
通信、Hash、sortなど使いまくる時はrubyのほうがいいけど

942:デフォルトの名無しさん
19/04/01 17:12:08.21 Tc5+6fel.net
いや、Perlだ。
理由
俺が慣れてるから。

943:デフォルトの名無しさん
19/04/01 22:48:54.89 0AqZLgzF.net
Perlはまぁ慣れ以外に使う意味はあまり見出せない。

944:デフォルトの名無しさん
19/04/02 04:44:16.86 3dIjgbOm.net
漏れは、Windows 10・WSL・Ubuntu 16.04 だけど、
sudo apt install ruby だけで、Ruby 2.3 が入った
2.4 以降の新しい書き方さえしなければ、動く
Perl, Python は、最初から入っているけど

945:デフォルトの名無しさん
19/04/02 10:00:50.55 USFH8Mum.net
>>933
死ね

946:デフォルトの名無しさん
19/04/02 10:29:57.68 egwP5Lwa.net
Perl脳だとdieなどと言いたがるんかね。

947:デフォルトの名無しさん
19/04/02 12:24:56.71 exqjvsIl.net
Perl die好き

948:デフォルトの名無しさん
19/04/02 12:34:58.56 m0agfZtU.net


949:デフォルトの名無しさん
19/04/17 15:16:55.69 bLXqfCqA.net
GNU AWK 5.0がリリース。8年ぶりのメジャーバージョンアップ。正規表現ライブラリが
GLIBCからGNULIBへ移行、名前空間が実装 2019年4月17日
URLリンク(www.publickey1.jp)
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環境が想定されるようになっています。
そして新たに名前空間が実装されています(詳細はマニュアルを参照とのこと)。

950:デフォルトの名無しさん
19/04/17 17:19:50.38 fsOEjVgH.net
sedとawkで簡単にできることを
他の方法でやってるアホを見ると優越感に浸れるよな

951:デフォルトの名無しさん
19/04/17 21:27:37.50 Cw3S472M.net
5.0.0じゃなくて4.3.0でいいじゃんって更新内容だな・・・

952:デフォルトの名無しさん
19/04/17 23:57:17.65 t5VcExa0.net
今時っぽく定期的にメジャーバージョンアップしていく作戦?
そろそろAWKCARD印刷してみようかな…

953:デフォルトの名無しさん
19/04/18 00:37:48.90 y8/6ebia.net
>>939
簡単な変換なのにWindowsとかでいきなりExcelでやろうとしちゃう人を見るとそこまでせんでも良いじゃないかとは思ってしまうな。
まあ日頃Windowsで事務処理的な事している人からすればそれ以上最良で分かりやすい環境はないんだろうけどな。
なんでもかんでもそれでやろうとして余計に分かりづらく複雑になってうまく行かずにハマっているのを見ると哀れに感じる。

954:デフォルトの名無しさん
19/06/01 01:13:44.70 QInzSHhj.net
こういう記法ができることを知らず、気づくのに数年かかった
正規表現比較のifで変数を使える、gsubなどで変数を使える
txt=”aabbcdefg1234”
x=”^” substr{$0,1,1} ”+”
if {txt ~ x}print ”ok”
y=substr{$0,1,1}
z=substr{$0,2,1}
gsub{y,z,$0}
(半角だと書き込みエラーになるので全角に変換)

955:デフォルトの名無しさん
19/06/01 01:15:01.39 QInzSHhj.net
>>943
あれ変換おかしい
{} → ()

956:デフォルトの名無しさん
19/06/01 05:25:56.80 cEFw76xP.net
ふふふ知ってた。

957:デフォルトの名無しさん
19/06/05 00:27:37.11 /Z5C9xDG.net
The AWK Programming Language (の邦訳本) から入ったので知ってはいるけど、
エスケープ文字を考慮してコードを書くのが面倒なので極力避けてるな。
文字列が正規表現へ「型変換」されるときの振舞いについて、本には一応書いてある。

958:デフォルトの名無しさん
19/06/08 18:14:03.76 QbmZ5eQJn
user's guide ~Regular Expressions

・Using Dynamic Regexps
結構前からある。
内部的には文字列定数を正規表現として使うために
2回目のスキャンが必要らしい。

959:デフォルトの名無しさん
19/06/11 21:06:31.25 +TF2B1JOC
どうせ廃れるぜ。この言語はよ。あばよ

960:デフォルトの名無しさん
19/06/12 18:34:22.16 yp7o1TZla
AWK / GAWKにて
UTF-8の文字列表示長さって、どうやって求めるのですか?
たとえば、 str="abcdeあいうえお"
半角を 1 とすると str の表示長さは 15

また、キャラクタ数と表示長さを1つスクリプトで
併用したいときはどうすればよいのでしょうか?

分かる方、教えてください。よろしくお願いいたします。

961:デフォルトの名無しさん
19/06/12 18:49:25.69 KWGtdn6vZ
私はこうしてます。
URLリンク(mfi.sub.jp)

962:デフォルトの名無しさん
19/06/12 19:07:09.50 kkOQizBgZ
>>950
ありがとございます。
助かります。

963:デフォルトの名無しさん
19/06/12 22:16:17.50 wOmIo+3+t
ごめんこっちの方が良かった。
UTF-8なので使い方は違うけど
ASCII/128個と半角カナ/63個以外は、長さ2で計算するので
表示長さだと思ってください。

URLリンク(ideone.com)

964:952
19/06/12 22:41:15.99 CfhwF05wL
忘れてました。
ideoneのstdin 文字化けしてるわけじゃないから。
ランダムに文字打ち出してるだけです。

965:デフォルトの名無しさん
19/06/13 13:49:33.22 FlIZ7NjL1
こちらもどうぞ
bsubstr(string, start, length)
指定位置(表示長さ単位)から指定表示長さの文字列を切り出す関数
文字化けする箇所はスペース充填
Shift_JISでもUTF-8でも可

URLリンク(ideone.com)

966:デフォルトの名無しさん
19/06/13 18:18:48.64 +trsIn9cI
よろしければこちらもどうぞ。
sformat(fw, prec, string)
sprintf("%*.*s", fw, prec, string)の替わりに
さっき作ったからバグがあるかもしれません。

URLリンク(ideone.com)

967:デフォルトの名無しさん
19/06/14 02:38:34.74 8YLuNO2w7
眠い、帰ってきて見直したらダメダメでした。
sformat()改良しました。
見てくれてるかな

URLリンク(ideone.com)

968:デフォルトの名無しさん
19/06/14 14:13:28.99 rib6nibVS
bsubstr()も見直した。
やっぱりダメダメだった。

URLリンク(ideone.com)

969:デフォルトの名無しさん
19/06/19 04:52:26.36 tVNS+22r.net
【出資】松本卓朗 人工知能詐欺【注意】
スレリンク(rikei板)

970:デフォルトの名無しさん
19/06/30 05:07:43.82 1ALBmyOB.net
AWKが巨大なテキストファイルを処理できないみたいな話を知ってる方いらしゃいますか。
大体1.4GiBくらいのファイルをAWKで編集しようとすると「ファイルの空きがない」みたいなエラーが出るので。

971:デフォルトの名無しさん
19/06/30 12:11:04.21 QU2Ls1X6.net
UNIXというかまともなPIPE実装されてるOSならそんなことはないが
WINDOWSとかいうアホなOSだと出るだろうね

972:デフォルトの名無しさん
19/06/30 12:19:57.44 pDzbN/vc.net
「ファイルの空きがない」っていうメッセージは "No space left on device" の事?

973:デフォルトの名無しさん
19/06/30 15:28:11.21 o/HVRPYj.net
>>960
コマンドラインでリダイレクト使ってればそうかも知れんが
スクリプト内で出力先を指定してたらわからんぞー

974:デフォルトの名無しさん
19/06/30 21:02:48.49 1ALBmyOB.net
>>960
なるほど。

975:デフォルトの名無しさん
19/06/30 21:56:09.12 HbSturrb.net
>>959
改行コードの違いにより全体が長い一行と認識されてしまい・・・なんて事はないか?
あ、でも、ファイルの空きがないってのは出力先の空き容量が足りないってことかな?

976:デフォルトの名無しさん
19/07/01 01:34:15.60 2smzn43h.net
>>961
そうです。
でもファイルシステムとしては全く余裕がある状態なんです。

977:デフォルトの名無しさん
19/07/01 02:30:15.69 jjSXuURg.net
なんだろうね。作業用ファイルが作られるパーティションの空きが足りないとかかな?

978:デフォルトの名無しさん
19/07/01 02:35:44.08 KfVaWYci.net
64bit版か32bit版かで違わないか
1.4GBは入力で出力も同じなのかはるかに小さいのか
出力が速すぎることはないのか、ゆっくり出力するようにしたらどうか

979:947
19/07/01 07:19:02.17 2smzn43h.net
>>966
すいません。これが原因でした。
AWKは全く悪くありませんでした。ご迷惑&&スレ汚し、大変失礼しました……。

980:デフォルトの名無しさん
19/07/01 07:38:04.28 O1pDJEnN.net
Ruby で


981:も、File.read なら、ファイルの内容を、メモリ内にすべて読み込んでしまうから、 500MB 以上なら、読み込めずにエラーになるだろう File.foreach なら、メモリ内に、1行ずつ読み込んでは捨てるから、大きいファイルでも大丈夫 まあ、RubyVM 起動時に、そのアプリが使うメモリのサイズを、指定できると思うけど。 JavaVM には、そういうオプションがある



982:デフォルトの名無しさん
19/07/02 21:28:41.07 Stz7guhB.net
awkで dateを使ったのですが、秒数が更新されず悩んでます。仕様とかそういう情報ご存知のかた教えて
頂けないでしょうか
■ コード
BEGIN {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +\"%Y/%m/%d %I:%M:%S\" " | getline datTmp
print "Start:" datTmp
system("sleep 2")
}
}
END {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +%I:%M:%S" | getline datTmp1
print "End:" datTmp1
system("sleep 2")
}
}
■ 結果
Start:2019/07/02 09:18:36
Start:2019/07/02 09:18:36
Start:2019/07/02 09:18:36
End:09:18:42
End:09:18:42
End:09:18:42
■ 疑問
Start, End 共に最初の 1 回目のみ秒数が取れているようで、2回目からは2秒後のはずなのに、秒数が変わっていない orz..

983:952
19/07/02 21:47:38.82 Stz7guhB.net
お騒がせしました。自己解決しました。
URLリンク(stackoverflow.com)
closeを使う必要が有ったようです。
■ コード
BEGIN {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +\"%Y/%m/%d %I:%M:%S\" " | getline datTmp
print "Start:" datTmp
system("sleep 2")
close("date +\"%Y/%m/%d %I:%M:%S\" ")
}
}
END {
for( intCounter = 0; intCounter < 3; intCounter++ )
{
"date +%I:%M:%S" | getline datTmp2
print "End:" datTmp2
system("sleep 2")
close("date +%I:%M:%S")
}
}
■ 結果
Start:2019/07/02 09:44:49
Start:2019/07/02 09:44:51
Start:2019/07/02 09:44:53
End:09:44:55
End:09:44:57
End:09:44:59

984:デフォルトの名無しさん
19/07/03 06:22:07.32 IYY9eTuR.net
gawkなら時間関数群あるんじゃ。

985:デフォルトの名無しさん
19/07/04 01:05:04.08 vxwYTSOB.net
ここいいね。Web上でawkの実行とその結果が見れるサービス。
URLリンク(www.tutorialspoint.com)

986:デフォルトの名無しさん
19/07/05 19:29:13.12 p9vBdDGq.net
           fi
          、Jj
           Й 
         /⌒ヽ
         l_ 0..0
          }{ l冊
        -=-v=-
        }{ 彡ミノ{
        }{ 非 }{
        匁OTO)匁
         }{ }{
         }{ }{
         及 及

987:デフォルトの名無しさん
19/08/05 11:42:29.38 N86fIT/u.net
Windows10 のコマンドプロンプトで awk を使いたいです。
vector で検索するといろいろでてくるのですが、
これがお勧めっていうのありますでしょうか。
日本語も扱えるのがいいです。
よろしくお願いします。

988:デフォルトの名無しさん
19/08/05 11:44:36.72 MNXFY7cg.net
Windows 10なら、標準機能のWSL(+Ubuntu)をインストールするのが一般的
vectorとかもうあんなのいらない

989:デフォルトの名無しさん
19/08/05 12:04:58.85 N86fIT/u.net
WSLって使ったことなかったんですけど、
ググってみたらもう Win で Linux が標準で使えるんですね。
これなら cygwin とかも、もういらないのかな。
情報どうもです。

990:デフォルトの名無しさん
19/08/05 12:06:14.91 MNXFY7cg.net
cygwinもいらない。遅いし互換性低いし

991:デフォルトの名無しさん
19/08/05 12:06:57.54 NOA3rn3w.net
WSL って pro だけ?
home だったら付いてない?
msys とか入れれば解決するけど

992:デフォルトの名無しさん
19/08/05 12:18:30.48 N86fIT/u.net
マイクロソフトもビルゲイツがいなくなって
多少は良い事もするようになったかな。

993:デフォルトの名無しさん
19/08/05 12:33:33.70 LhsszH09.net
>>980
いや、まだ足りない。何でもかんでもWindowsの上で動くようにしているだけだしね。すると何を動かすにしてもWindowsのライセンス料が掛かる。
まあ仕方のないことではあるがな。

994:デフォルトの名無しさん
19/08/05 12:42:57.45 MNXFY7cg.net
WSLはhomeでも使える。WSL2も使えるようにすると発表があった。

995:デフォルトの名無しさん
19/08/05 12:59:49.23 MNXFY7cg.net
>>981
> 何でもかんでもWindowsの上で動くようにしているだけだしね。すると何を動かすにしてもWindowsのライセンス料が掛かる。
それがLinuxでも動くようになり、Windowsのライセンス料もかからなくなってきてるから
最近のMSの評判が抜群に上がってるんだろ

996:デフォルトの名無しさん
19/08/05 15:30:49.20 VYzH3PNA.net
>>980
windows育ちでないunix系を知っている今のCEOに変わってから変化し始めた
ダメな旧MS文化からunix系やandroid系に転換をはかっている
ダメだったのは前CEOバルマー

997:デフォルトの名無しさん
19/08/05 17:45:26.88 QFC6lZK5.net
いっそのこと UNIX のカーネルに Windows のシェルを
被せてもらいたいですね。
Mac はもうそうなってるし。

998:デフォルトの名無しさん
19/08/05 17:59:46.21 MNXFY7cg.net
そのわりに、MacってUNIXを全然活かせてないよな?
forkは遅いし、仮想マシン使ったほうがMacよりも速いし。

999:デフォルトの名無しさん
19/08/05 18:09:58.23 MNXFY7cg.net
まあ、AppleはUNIXを真似ることしかできなかったわけで
UNIXと双璧をなす独自OSを作り上げたMSと同じことをしろというのも酷な話だが、
UNIX/Linuxを取り込むなら、WSLと同じ仕組みで十分な気がする。
あとAppleが運が悪かったのは、Linuxがここまで普及すると予測できなかったことかな
BSD系を採用しちゃったので、Linuxとコマンド体系が微妙に変わってしまった。
標準でUnixコマンドが搭載されてるにも関わらず、サードパーティのHomebrewを使って
Linux互換(GNU版)のコマンドに置き換える人も多いし。

1000:デフォルトの名無しさん
19/08/05 20:09:15.04 oBMYP5f0.net
> UNIXと双璧をなす独自OSを作り上げたMS
ゴミをでっち上げ、OSとかよく解らない池沼層に売っただけ。

1001:デフォルトの名無しさん
19/08/05 20:51:07.86 LhsszH09.net
MSはOSというよりはUIを作った感じだな。

1002:デフォルトの名無しさん
19/08/05 21:05:19.12 MNXFY7cg.net
>>988
嫉妬すんなよw 事実は受け入れようぜw

1003:デフォルトの名無しさん
19/08/05 21:12:10.12 O6CFE/yb.net
マクドナルドのハンバーガー並に普及した

1004:デフォルトの名無しさん
19/08/05 22:10:04.48 o5dspg/Y.net
macOSの前身のNEXTSTEPは技術的には絶賛されてた
macOSは中身ほぼNEXTSTEPで見た目をモダンにしただけだ

1005:デフォルトの名無しさん
19/08/06 14:52:58.06 SvihPrAV.net
マルチユーザーマルチスレッドωωω

1006:デフォルトの名無しさん
19/08/06 17:42:44.33 9obbnMlM.net
> macOSの前身のNEXTSTEPは技術的には絶賛されてた
でもUNIXの割にforkが遅いんだよな
cygwin使ってるのか?って思っちゃうぐらい。

1007:デフォルトの名無しさん
19/08/06 20:48:47.73 ePqW8mte.net
スレッドも遅いの?

1008:デフォルトの名無しさん
19/08/07 00:04:17.07 NEAc+E18.net
>>994
forkが速くて称賛されてた訳じゃないからな…
ちなみにforkの速度は今時そんなに重要じゃないぞ
もしそれで困ってるならスレッドを使うとか事前にプロセスを起動して置くなりすればいい

1009:デフォルトの名無しさん
19/08/07 00:33:23.13 WK8NJ3/V.net
でもそうするとWSLで十分じゃね?という話になる

1010:デフォルトの名無しさん
19/08/07 01:24:29.79 NRK0ob+d.net
新手のスレ埋め立てかw

1011:デフォルトの名無しさん
19/08/07 04:38:27.64 /UJIAec/.net
>>987
そんなこと気にする人ってどれくらい居るんだろう
CPUですら68、PowerPC、x86と変えてきて
OSは独自、BSDと来たもんだ
多くの人は中身を気にせず使ってるのに
自分は元マカーだけど今は1台も持ってない
でもファッションでMacBookいいカナと思うよ
仕事はITのエンジニアで商用UNIX使ってるけど
コマンドなんてどうでもいいわ
好きなところにログインすれば言いだけなんだから

1012:デフォルトの名無しさん
19/08/08 01:24:30.39 X/CTiqlR.net
| awk -F: '! /BINARY/ {print $1}'\
正規表現無しの簡潔な部分はperl -lane より短くて最高

1013:デフォルトの名無しさん
20/08/02 11:03:40.06 mglN/rTr.net
>>1000
短かいのが正義!とは思わないけど、
perlと違ってSUSで定義されてるのがありがたいね。

1014:デフォルトの名無しさん
20/08/02 17:25:58.24 IlYSPDQE.net
ファッションでというと、写真撮影しているオシャレな感じのスタジオの受け付けにマックがあったのだが画面を見るとWindowsだったというのを見たことがあるな。
エミュでWindows動かしてそこで業務用のソフト動かして受け付け業務に使っているということだが、客から見るとディスプレイの裏側が主に見えるのでAppleマークが見えると。

1015:デフォルトの名無しさん
20/08/02 19:24:52.35 mglN/rTr.net
>>1002
誤爆?

1016:デフォルトの名無しさん
20/08/03 02:35:57.38 iGTWfWuc.net
>>1003
>>999

1017:デフォルトの名無しさん
20/08/03 09:51:55.82 3aFKjSal.net
Aho

1018:デフォルトの名無しさん
20/08/03 10:16:40.93 ZKD4yCvc.net
AWmae no Kachan debeso

1019:デフォルトの名無しさん
20/08/03 20:08:52.49 iGTWfWuc.net
awk の a は本当に Aho の略(人名)

1020:デフォルトの名無しさん
20/08/08 20:17:17.30 02OvZPQeD
Windowsのコマンドプロンプトでgawk使ってますが、
BEGIN{
print ("三" ~ /[亜-黑]/) ? "matched" : "unmatched"
print ("浦" ~ /[亜-黑]/) ? "matched" : "unmatched"
}
漢字かどうかの判断で、浦はマッチするけど、三がマッチしません。。(井や上もマッチしない)
SHIFT JISです。Klabaster 4.1.4でもezwinports 5.1.0でも同じ結果でした。どなたかヒントもらえると嬉しいです。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch