[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/01 08:48 / Filesize : 292 KB / Number-of Response : 1034
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

awkについて語るスレ $2



1 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:55:42 .net]
腐っても鯛? 騏も老いては駑馬に劣る?
三人の碩学が生み出したスクリプト言語AWKについて語るスレ

◆ 前スレ
awkについて語るスレ
pc10.2ch.net/test/read.cgi/tech/1023556171/

◆ 関係スレ
シェルスクリプト相談室
pc10.2ch.net/test/read.cgi/tech/1112553783/
AWKでCGI
pc10.2ch.net/test/read.cgi/php/1171804314/
【sed】シェルスクリプト総合@LINUX Part2【awk】
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/

905 名前:デフォルトの名無しさん [2018/12/23(日) 00:54:43.50 ID: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 名前:デフォルトの名無しさん [2018/12/23(日) 01:05:13.25 ID:quoNoaXg.net]
886です。
pとか関係ないパラメータ入れてしまってごめんなさい。
addnode(a, "1-5-1", "connot");
これができません。
a["5"]がスカラーだと言っています。

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

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

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

910 名前:デフォルトの名無しさん [2018/12/23(日) 08:49:07.73 ID:S8HMq/6c.net]
gawk4でとにかく速いのが良いならcで拡張関数作るのが良いかと(反則?)

flatten_array_typed関数(4.1.4はflatten_array関数)でawk_flat_array_t構造体のメンバ変数countに要素数が入りますので
要素がAWK_ARRAYなら再帰するように処理すれば出来上がり

APIの使い方は
extension\rwarray.cとか
https://www.gnu.org/software/gawk/manual/html_node/Flattening-Arrays.html#Flattening-Arraysを参考に

gawkだけでやる場合、もし配列の要素数が10万とか100万あるのなら、関数の引数を出来るだけ減らして
関数内からグローバル変数を直接参照したほうが速くなると思います

911 名前:デフォルトの名無しさん [2018/12/23(日) 11:20:10.63 ID:qffc/3mK.net]
もともと添え字がすべて文字列で保存する仕様というのはしってはいたが
多次元配列はaho[i,j]という形式にして工夫して使えということらしいな

awkで多次元配列なんか使ったことないから知らんかったわ

とういワケでにその形式で多次元配列をlengthでとると>>888で取得したい値になる
当然といえば当然
特定の次元の列だけのとりかたはよくわからん とれんのかコレ

 www.kt.rim.or.jp/~kbk/gawk-30/gawk_12.html#SEC119
 Using Numbers to Subscript Arrays

  配列について重要なのは、配列の添え字は常に 文字列として扱われるということである。
  配列の添え字に数字を使った場合、それは添え字付けに使われる前に 文字列に変換される

 www.kt.rim.or.jp/~kbk/gawk-30/gawk_12.html#SEC121
 Multi-dimensional Arrays

  多次元配列とは、配列要素の指定を複数の添字の並びによって行う配列である。例え ば二次元の配列は二つの添字を必要とする。
  一般的な(awkも含めた大多数の 言語では) 二次元配列の要素に対する参照は grid[x,y]このよ うに行う。 (gridは配列の名前)

  セパレータには組み込み変数SUBSEPに格納 されている値が使われる。

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

913 名前:デフォルトの名無しさん [2018/12/23(日) 22:29:12.74 ID:qffc/3mK.net]
まず入力から多次元配列を読込む処理でも作ってみるか
できるのかがよく分からん

コレがすんなりできないとコレ自体が使えるシロモノにならなそうだしな

テストデータは作ってみた
https://ideone.com/Sir0IE

awkのこの多次元配列についてほかのとこで書いてあるの読んでみると
色々と面倒なことがおきるはのは分かった

特に問題がおきそうなのは一度配列やスカラーで要素を追加すると、
その配列やスカラーを変えて上書きする場合明示的にそれを削除しないと上書きして使えない

きっとなノードを削除するときはその要素゙から辿って一番深いとこから再帰的に削除しないと残骸が残る
cのメモリリークと同じことが起きると推定される

いまいちこの多次元配列に使い道があるのかどうかが分からない



914 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 23:32:19.00 ID:nM/PpEMV.net]
lispが最適
awkは不適

915 名前:デフォルトの名無しさん [2018/12/24(月) 01:01:19.83 ID:ivcUrO89.net]
https://ideone.com/PFBwQU

どうにかして動的に配列を構成できないか調べてみたが
やりかたが分からん

>>894の質問してるのが書いた方法で
一旦多次元配列を読む込むようにはしてみた

質問してるのが欲しいといってる要素の数は
結局入力の行数と同じになる

916 名前:デフォルトの名無しさん [2018/12/24(月) 01:07:37.50 ID:ivcUrO89.net]
https://ideone.com/zTUFL2

switch分のcaseが1つ少なかったから追加しといた

917 名前:デフォルトの名無しさん [2018/12/24(月) 09:11:50.63 ID: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が↓で回答している
https://groups.google.com/forum/#!topic/comp.lang.awk/CKwoes0_63U

918 名前:デフォルトの名無しさん [2018/12/24(月) 15:58:51.02 ID:ivcUrO89.net]
なるほど
ありがとう

きっと再利用されるから
気にせず放置でいいのか

919 名前:デフォルトの名無しさん [2018/12/24(月) 17:27:46.25 ID: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 名前:デフォルトの名無しさん [2018/12/27(木) 20:01:48.39 ID:pQqvXPza.net]
よく分からんが
例えばそれで>>904の入力データなんかを読み込めたりするのか

>>905のswitchだと事前に何次元かわかってないと読み込めない

何次元になるか不明な入力データの場合
どうやれば格納できるかよくわからんんかった

921 名前:デフォルトの名無しさん [2018/12/27(木) 22:46:53.38 ID:X7jxTwwp.net]
>>908の「一度作って、削除する」というのは
https://www.gnu.org/software/gawk/manual/gawk.html#Arrays-of-Arrays
ここの一番下のsplitがエラー吐く例の回避策で、配列の要素を最初から配列扱いすることはできないから
予め次階層にダミー要素をぶら下げておき、本命を格納し終えたらダミーは消すって意味かな

自分で書いたらこんなんなったけど、いちおう何次元でも格納できそう
https://ideone.com/83ykKF#stdin

922 名前:デフォルトの名無しさん [2018/12/30(日) 03:28:21.38 ID: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 名前:デフォルトの名無しさん [2018/12/30(日) 03:29:15.30 ID: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 名前:デフォルトの名無しさん [2018/12/31(月) 02:46:41.48 ID:20SukTdNU]
ちゃんと書いてみました。
https://ideone.com/rdeTvE

925 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 00:00:01.96 ID:7rl7mk2H.net]
2019年もawkのお世話になります

926 名前:デフォルトの名無しさん mailto:sage [2019/01/02(水) 18:12:37.70 ID:0+aicLseW]
すげー

927 名前:デフォルトの名無しさん [2019/01/05(土) 08:05:13.61 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 18:58:36.44 ID:9Z2hbdGL.net]
60くらいの教授が40年くらい前にAWKでアセンブラ作ったとか言ってたんだけど
当時に既にあったということと当時から小規模なコンパイラなら作れるくらい高性能だったことに驚いた

929 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 19:10:49.73 ID:dIIT7BCG.net]
アセンブラをコンパイラとは呼ばないが

930 名前:デフォルトの名無しさん [2019/02/06(水) 10:31:17.59 ID:+qagyc5o.net]
aho

931 名前:デフォルトの名無しさん mailto:sage [2019/02/06(水) 13:09:33.86 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/02/06(水) 17:39:23.37 ID:+3VpeZVh.net]
>>917
思わず "assembler by awk" でググって The Amazing Awk Assembler by Henry Spencer を
ダウンロードしちゃったじゃないか。

933 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 17:41:13.06 ID:Y0E0nwid.net]
awkでファイルがあるかどうかの判別は、どのようにしたらよいのでしょうか?

具体的にはBEGINの中で

getline a < "/dev/stdin";
fn = a".txt"

と任意のファイル名を作った後、そのファイルがあるかどうかを確認したいんです。

もしファイルがすでにあったら処理は終了、無ければ以後の処理をそのファイルにリダイレクトする、という感じです。



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

935 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 11:45:53.93 ID:FuDjIOWV.net]
>>923
できました!ありがとうございます!!

936 名前:デフォルトの名無しさん [2019/03/21(木) 08:10:09.34 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 09:51:18.96 ID:WMaCNtBE.net]
最後の memo[coin,depth] = win + lose はそのまま関数の戻り値として
return しなければならないが、それを忘れている。

さらに、正しい答えが返らない原因が 2 点。
関数定義の引数名間違い: i,j → win,lose。
if(depth == 0) と if(coin == 0) の判定を行う順序が逆。

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

939 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 21:25:33.68 ID:ZeSQsBE1.net]
それぐらいの処理は、Ruby で作れ!

940 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 23:54:47.78 ID:7AyLRSvD.net]
オーク英雄物語 〜忖度列伝〜
https://ncode.syosetu.com/n8418ff/1/ 👀
Rock54: Caution(BBR-MD5:0be20a4887bc3d3353f527d3636c44e3)


941 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 17:01:28.78 ID:nwflCE8J.net]
>>928
awkの方がいいときもある

installしなくていい
タスクマネージャでみているとrubyよりメモリを食わない時もある
融通の利く配列が超便利

通信、Hash、sortなど使いまくる時はrubyのほうがいいけど

942 名前:デフォルトの名無しさん [2019/04/01(月) 17:12:08.21 ID:Tc5+6fel.net]
いや、Perlだ。

理由
俺が慣れてるから。

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



944 名前:デフォルトの名無しさん mailto:sage [2019/04/02(火) 04:44:16.86 ID:3dIjgbOm.net]
漏れは、Windows 10・WSL・Ubuntu 16.04 だけど、
sudo apt install ruby だけで、Ruby 2.3 が入った

2.4 以降の新しい書き方さえしなければ、動く

Perl, Python は、最初から入っているけど

945 名前:デフォルトの名無しさん mailto:sage [2019/04/02(火) 10:00:50.55 ID:USFH8Mum.net]
>>933
死ね

946 名前:デフォルトの名無しさん mailto:sage [2019/04/02(火) 10:29:57.68 ID:egwP5Lwa.net]
Perl脳だとdieなどと言いたがるんかね。

947 名前:デフォルトの名無しさん [2019/04/02(火) 12:24:56.71 ID:exqjvsIl.net]
Perl die好き

948 名前:デフォルトの名無しさん mailto:sage [2019/04/02(火) 12:34:58.56 ID:m0agfZtU.net]


949 名前:デフォルトの名無しさん [2019/04/17(水) 15:16:55.69 ID:bLXqfCqA.net]
GNU AWK 5.0がリリース。8年ぶりのメジャーバージョンアップ。正規表現ライブラリが
GLIBCからGNULIBへ移行、名前空間が実装 2019年4月17日
https://www.publickey1.jp/blog/19/gnu_awk_508glibcgnulib.html

UnixやLinuxにおいてsedやgrepなどと並んでよく知られているツールの1つがawk(オーク)
です。このawkのGNUプロジェクトによる実装の最新版「GNU AWK 5.0」(gawk 5.0)の
リリースが発表されました。

2011年にリリースされたGNU AWK 4.0から8年ぶり、直前のバージョンでとして2017年10月に
リリースされた4.2.0からは約1年半ぶりとなります。

AWKはいわゆるスクリプティング言語の一種。変数や関数、制御文など基本的な構文を備え、
テキストファイルを効率的に処理できるのが特徴です。

GNU AWK 5.0の新機能としては、printfの%aおよび%Aの書式がPOSIX標準に準拠したこと、
正規表現のルーチンが、長年にわたってメンテナンスされてきたGLIBCからGNULIBに
置き換わったことなど。

また、識別子に非英語文字を使うためのドキュメント化されていなかったオプションなどは
削除され、ソースコードはC99環境が想定されるようになっています。

そして新たに名前空間が実装されています(詳細はマニュアルを参照とのこと)。

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

951 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 21:27:37.50 ID:Cw3S472M.net]
5.0.0じゃなくて4.3.0でいいじゃんって更新内容だな・・・

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

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



954 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 01:13:44.70 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 01:15:01.39 ID:QInzSHhj.net]
>>943
あれ変換おかしい
{} → ()

956 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 05:25:56.80 ID:cEFw76xP.net]
ふふふ知ってた。

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

958 名前:デフォルトの名無しさん [2019/06/08(土) 18:14:03.76 ID:QbmZ5eQJn]
user's guide 〜Regular Expressions

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

959 名前:デフォルトの名無しさん [2019/06/11(火) 21:06:31.25 ID:+TF2B1JOC]
どうせ廃れるぜ。この言語はよ。あばよ

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

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

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

961 名前:デフォルトの名無しさん [2019/06/12(水) 18:49:25.69 ID:KWGtdn6vZ]
私はこうしてます。
mfi.sub.jp/_html_awk/gawk_blength.html

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

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

https://ideone.com/97R395



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

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

https://ideone.com/3295sA

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

https://ideone.com/TN7Ka4

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

https://ideone.com/VvxBzq

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

https://ideone.com/7vqqVO

969 名前:デフォルトの名無しさん [2019/06/19(水) 04:52:26.36 ID:tVNS+22r.net]
【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/

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

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

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

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



974 名前:デフォルトの名無しさん mailto:sage [2019/06/30(日) 21:02:48.49 ID:1ALBmyOB.net]
>>960
なるほど。

975 名前:デフォルトの名無しさん [2019/06/30(日) 21:56:09.12 ID:HbSturrb.net]
>>959
改行コードの違いにより全体が長い一行と認識されてしまい・・・なんて事はないか?

あ、でも、ファイルの空きがないってのは出力先の空き容量が足りないってことかな?

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

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

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

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

980 名前:デフォルトの名無しさん mailto:sage [2019/07/01(月) 07:38:04.28 ID:O1pDJEnN.net]
Ruby で

981 名前:も、File.read なら、ファイルの内容を、メモリ内にすべて読み込んでしまうから、
500MB 以上なら、読み込めずにエラーになるだろう

File.foreach なら、メモリ内に、1行ずつ読み込んでは捨てるから、大きいファイルでも大丈夫

まあ、RubyVM 起動時に、そのアプリが使うメモリのサイズを、指定できると思うけど。
JavaVM には、そういうオプションがある
[]
[ここ壊れてます]

982 名前:デフォルトの名無しさん [2019/07/02(火) 21:28:41.07 ID: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 [2019/07/02(火) 21:47:38.82 ID:Stz7guhB.net]
お騒がせしました。自己解決しました。
https://stackoverflow.com/questions/2391272/gawk-awk-piping-date-to-getline-sometimes-wont-work
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 名前:デフォルトの名無しさん mailto:sage [2019/07/03(水) 06:22:07.32 ID:IYY9eTuR.net]
gawkなら時間関数群あるんじゃ。

985 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 01:05:04.08 ID:vxwYTSOB.net]
ここいいね。Web上でawkの実行とその結果が見れるサービス。
https://www.tutorialspoint.com/execute_awk_online.php

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

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

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

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

990 名前:デフォルトの名無しさん mailto:sage [2019/08/05(月) 12:06:14.91 ID:MNXFY7cg.net]
cygwinもいらない。遅いし互換性低いし

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

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

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



994 名前:デフォルトの名無しさん mailto:sage [2019/08/05(月) 12:42:57.45 ID:MNXFY7cg.net]
WSLはhomeでも使える。WSL2も使えるようにすると発表があった。

995 名前:デフォルトの名無しさん mailto:sage [2019/08/05(月) 12:59:49.23 ID:MNXFY7cg.net]
>>981
> 何でもかんでもWindowsの上で動くようにしているだけだしね。すると何を動かすにしてもWindowsのライセンス料が掛かる。

それがLinuxでも動くようになり、Windowsのライセンス料もかからなくなってきてるから
最近のMSの評判が抜群に上がってるんだろ

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

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

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

999 名前:デフォルトの名無しさん mailto:sage [2019/08/05(月) 18:09:58.23 ID:MNXFY7cg.net]
まあ、AppleはUNIXを真似ることしかできなかったわけで
UNIXと双璧をなす独自OSを作り上げたMSと同じことをしろというのも酷な話だが、
UNIX/Linuxを取り込むなら、WSLと同じ仕組みで十分な気がする。

あとAppleが運が悪かったのは、Linuxがここまで普及すると予測できなかったことかな
BSD系を採用しちゃったので、Linuxとコマンド体系が微妙に変わってしまった。
標準でUnixコマンドが搭載されてるにも関わらず、サードパーティのHomebrewを使って
Linux互換(GNU版)のコマンドに置き換える人も多いし。

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

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

1002 名前:デフォルトの名無しさん mailto:sage [2019/08/05(月) 21:05:19.12 ID:MNXFY7cg.net]
>>988
嫉妬すんなよw 事実は受け入れようぜw

1003 名前:デフォルトの名無しさん mailto:sage [2019/08/05(月) 21:12:10.12 ID:O6CFE/yb.net]
マクドナルドのハンバーガー並に普及した



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

1005 名前:デフォルトの名無しさん [2019/08/06(火) 14:52:58.06 ID:SvihPrAV.net]
マルチユーザーマルチスレッドωωω

1006 名前:デフォルトの名無しさん mailto:sage [2019/08/06(火) 17:42:44.33 ID:9obbnMlM.net]
> macOSの前身のNEXTSTEPは技術的には絶賛されてた

でもUNIXの割にforkが遅いんだよな
cygwin使ってるのか?って思っちゃうぐらい。

1007 名前:デフォルトの名無しさん [2019/08/06(火) 20:48:47.73 ID:ePqW8mte.net]
スレッドも遅いの?

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

1009 名前:デフォルトの名無しさん mailto:sage [2019/08/07(水) 00:33:23.13 ID:WK8NJ3/V.net]
でもそうするとWSLで十分じゃね?という話になる

1010 名前:デフォルトの名無しさん mailto:sage [2019/08/07(水) 01:24:29.79 ID:NRK0ob+d.net]
新手のスレ埋め立てかw

1011 名前:デフォルトの名無しさん [2019/08/07(水) 04:38:27.64 ID:/UJIAec/.net]
>>987
そんなこと気にする人ってどれくらい居るんだろう
CPUですら68、PowerPC、x86と変えてきて
OSは独自、BSDと来たもんだ
多くの人は中身を気にせず使ってるのに

自分は元マカーだけど今は1台も持ってない
でもファッションでMacBookいいカナと思うよ
仕事はITのエンジニアで商用UNIX使ってるけど
コマンドなんてどうでもいいわ
好きなところにログインすれば言いだけなんだから

1012 名前:デフォルトの名無しさん mailto:sage [2019/08/08(木) 01:24:30.39 ID:X/CTiqlR.net]
| awk -F: '! /BINARY/ {print $1}'\

正規表現無しの簡潔な部分はperl -lane より短くて最高

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



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

1015 名前:デフォルトの名無しさん mailto:sage [2020/08/02(日) 19:24:52.35 ID:mglN/rTr.net]
>>1002
誤爆?

1016 名前:デフォルトの名無しさん [2020/08/03(月) 02:35:57.38 ID:iGTWfWuc.net]
>>1003
>>999

1017 名前:デフォルトの名無しさん [2020/08/03(月) 09:51:55.82 ID:3aFKjSal.net]
Aho

1018 名前:デフォルトの名無しさん mailto:sage [2020/08/03(月) 10:16:40.93 ID:ZKD4yCvc.net]
AWmae no Kachan debeso

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

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

1021 名前:デフォルトの名無しさん mailto:sage [2020/08/10(月) 14:00:21.38 ID:l5zwQhnu.net]
>>1000 >>1001
何事もないように書いてるけど実は1年空いてる

1022 名前:デフォルトの名無しさん [2020/08/10(月) 14:01:04.64 ID:l5zwQhnu.net]
即レスも大概だが亀レスも大概やな!

1023 名前:デフォルトの名無しさん mailto:sage [2020/08/10(月) 22:16:10.09 ID:DZgybkpe.net]
AWesome Kame res



1024 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 10:26:07.54 ID:uwSNr/lm.net]
真のawkerは多くを語らない。
awkを語らない…ナンチャッテ!

1025 名前:デフォルトの名無しさん [2020/08/13(木) 16:09:43.86 ID:GqR68DDy.net]
は?

1026 名前:デフォルトの名無しさん [2020/08/14(金) 13:41:25.37 ID:H4TUvcZb.net]
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'

1027 名前:デフォルトの名無しさん [2020/08/14(金) 15:50:04.19 ID:XKPWE/tl.net]
www.manabu-oshieru.com/hyakunin/064.html

1028 名前:デフォルトの名無しさん [2020/09/14(月) 11:09:07.94 ID:c+iGp9gS.net]
bashで小数点の比較をする方法にbcを使うという意見が多かった
けどawkの方がわかりやすいと思う
condition()
{
awk 'BEGIN { exit ! ('"$*"') }'
}

x=5.6; y=42.1
if condition "$x < $y"; then
echo true
else
echo false
fi

1029 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 11:15:45.20 ID:S/jhW9z+.net]
bcはインストールされてないことが時々あるんで使わないね
まあその点はawkの方がマシだろう

1030 名前:デフォルトの名無しさん [2020/09/14(月) 12:03:30.66 ID:gMM3Z1ji.net]


1031 名前:デフォルトの名無しさん [2020/09/14(月) 12:08:39.52 ID:H3Bos02D.net]
Aho Weinberger Kernighan

1032 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 4951日 12時間 12分 57秒

1033 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<292KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef