>>4280 くま Solarisi・・・って部分は置いといて。 shというかnawkですが、以下のようにやればできます。 (awkでは動きません。) ------------------------ $ nawk -F, ' /^[0-9]+,[0-9]+$/ { var[$1] = $2; } END { for (i=0; i<=999; ++i) { j = sprintf("%03d",i); if (j in var) print j "," var[j]; } }' data.txt ------------------------ |
>>4281 zsh >Solarisi・・・って部分は置いといて。 間違えた・・・Solaris8iだ・・・ |
はじめまして。ネットワークプログラミングのページを参考にさせてもらっています。 で、以下の部分、 >>DNS クライアントを作ってみよう (3) >リソースデータは「&Sorry, no version string is available」と表示されるが、 >dig や nslookup は「Sorry, no version string is available」となります (& がない)。 >先頭の & を削るような規則があるようだが、それが何なのかはわからなかった。 これ、'&'=38で、リソースのlengthみたいです。 きちんとした資料では、まだ見つけられていないのですが、 djbdnsのソースコード(dns_txt.c)上では、ドメイン名と同じように、 [length][data][length][data]と見ているようです。 リソースをいくつかのブロック(例えばライン毎など)に分けているのかなーと。 んん。標準な資料を探し中です。 |
>>4280 くま Solaris8iは手元にないので試していないですが、shで。 --------------------------- #!/bin/sh # デリミタを[,]に IFS=, # キーのリスト list="" # 計算 while read key value; do eval "if test -z \$array$key;then array$key=0; fi" eval \array$key=`eval "expr \\$array\$key + \$value"` list=$list,$key done < data.txt # 重複したキーを削除する clone=`echo "$list" | sed 's/^,//'` for key in $clone; do list=`echo "$list" | sed "s/$key//g" | sed 's/,[,]*/,/g'` list=$list,$key done # 表示 list=`echo "$list" | sed 's/^,//'` list=`echo "$list" | sed 's/,$//'` for key in $list; do echo -n $key, eval echo \$array$key done --------------------------- $ sh test.sh 001,60 002,5 003,35 004,100 --------------------------- 効率悪そうだ..。 |
>>4280 くま 以下ので出来ると思います。 ---------------------------------- #!/bin/sh nawk -F"," ' BEGIN { } function syukei() { total=0+0; no=$1; while (NF>0) { if (no == $1) { total = total + $2; } else { printf("%03d:%d\n",no,total); no=$1; total=$2; } getline; } printf("%03d:%d\n",no,total); } { if (NF == 0) next ; syukei() ; }' file.txt exit 0 |
続々と投稿されているので投稿してみます。 >>4280 くま awkなら、 $ nawk -F, '{v[$1]+=$2;}END{for(k in v) print k","v[k]}' data.txt | sort とできると思います。 /+ data.txt -> データファイル +/ |
>>4286 nagadomi nagadomiさんのコード凄いですね。 1行で実現してしまうなんて。 自分も、1行で実現できないかと試みてはみたのですが、良い案が浮かび ませんでした。 向学として教えていただきたいのですですが、 番号の比較、判断していませんが、何故、上手く出来ているのですか。 >'{v[$1]+=$2;}END{for(k in v) print k","v[k]}' 宜しくお願いします。 |
>>4286 nagadomi うわー、awkってforでその表記できるんだっけー。 すっかり忘れてました。 最近awk触っていなかったとは言え、恥ずかしい・・・ >>4287 シャチ >for(k in v) は、配列vの値を一つ一つ変数kに代入してループするという意味です。 |
>>4288 zsh ×配列vの値を一つ一つ変数kに代入してループする ○配列vの添字を一つ一つ変数kに代入してループする |
>>4287 シャチ zshのおっしゃるとおりです。 Perlでいうforeach的な使い方です。 >>4288 zsh awkは、1年ほど前に1日(プログラム一個..)使ったことがあるだけだったので、 実はリファレンスをちょっと見ました。 そこでforeachあるじゃんと..。知らない分、確認するのでうまくいった感じですかね..。 zshさんのコードは、ソートを考えて、あのような書き方をしているのかと思っていました。 私は普段、こういうのにはPerlを使っています。 |
>>4288 zsh 番号の比較、判断していませんが、前後が同じかどうかの判断は どこでしているのですか。 >{v[$1]+=$2;} で判断しているのですか。 お願いします。 >>4290 nagadomi Perlを使うのが便利なのですか。 Perlは、人が作ったのをメンテナンスするため1日調べたのみです。 |
>>4288 zsh 配列vの添え字が、番号なんですね。 だから、番号の配列要素に割り当てられた値が使用できるから 番号の比較、チェックが不要なんですね。 添え字には、数値しか使用できなと思っていました。 文字列も使えるんですね。 |
>>4283 nagadomi なるほど、length ですか。RFC をあさってみましたが、まだ見つけられません。 発見したらぜひ教えてください。 関係あるかな? と思いつつ、まだちゃんと読んでいない資料: http://www.cs.utah.edu/~danderse/adns/arch.html http://www.zeroconf.org/Rendezvous/txtrecords.html |
Solaris8で、Bシェル(sh)で以下のことを行いたいのですが、 良い方法を教えてください。 2つのファイルの中身を比較し、その結果を表示したいのです。 --- file1.txt ----- hanako.sato jiro.yamamoto taro.yamada taro-1.yamada tsuyoshi.saito --- file1.txt ----- jiro.yamamoto taro-1.yamada taro-2.yamada gou.yamashita 結果 file1 Only, hanako.sato match,jiro.yamamoto file1 Only,taro.yamada match,taro-1.yamada file1 Only,tsuyoshi.saito file2 Only,taro-2.yamada file2 Only,gou.yamashita と出力したいのです。 お願いします。 |
>>4294 hagu 案1. file1.txt を while で 1行ずつ読み込み、読み込んだ行が file2.txt に含まれるかを grep で調べる。 案2. file1.txt と file2.txt をそれぞれ sort し、diff をとって、 行頭が < か、> かを調べる。重複する行は…どうしましょうねぇ。 案3. perl でハッシュに突っ込む。3行くらいで書けそうな気がします。 |
>> 4295 perl使用したことありません。 書くとしたらどうなりますか。 案1ですと、file1.txtで調べたあと、file2.txtのみで存在する物も調べるので 同様の処理が必要になります。重複する行が2回でることになります。 |
>>4296 hagu Perl クックブック VOLUME 1 のレシピ 4.8・4.9 あたりを立ち読みして、 なんとかなりそうなら手を出してみるとよいでしょう。 > 重複する行が2回でることになります。 file2.txt を while で 1行ずつ読み込み、読み込んだ行が file1.txt に 含まれていれば何も表示しない、でいいのでは。 > 案2. file1.txt と file2.txt をそれぞれ sort し、diff をとって、 > 行頭が < か、> かを調べる。重複する行は…どうしましょうねぇ。 GNU diff があるなら (unified diff を出力できる diff があるなら)、 % diff -u -U 10000 file1.txt file2.txt として (10000 はファイルの行数を超える数)、 ・行頭が - なら file1.txt のみ ・行頭が + なら file2.txt のみ ・行頭がスペースなら重複行 ですかね。 |
>>4294 hagu 1.file1.txtとfile2.txtを辞書順にソートする。 2.diffコマンドで、file1.txtとfile2.txtの差異を表示する。 diffコマンドの出力結果の見方は、ご存じですよね。 ">"は、右側に指定したファイル内に差異があることを示す。 "<"は、左側に指定たファイルにある差異があることを示す。 3.grepとかcutを使用して見やすいように編集。 4.file1.txtかfile2.txtをキーにして、grepで存在する文字列だけを抽出。 で、出来ると思います。 |
>>4294 hagu 動作未確認ですが、こういうのはダメですかね。 sort file1 | uniq > file1-2 sort file2 | uniq > file2-2 comm -23 file1-2 file2-2 | sed 's/^/file1 Only,/' comm -13 file1-2 file2-2 | sed 's/^/file2 Only,/' comm -12 file1-2 file2-2 | sed 's/^/common,/' 順序よく並んでしまいますが。 |
>> 4299 ありがとうございます。 確認してみます。 |
>>4299 has ありがとうございます。 期待していた結果が得られました。 commというコマンドがあるのですね。 知りませんでした。 勉強になりました。 |
突然すみません。私は、いま卒業研究で動画像を処理しようとしてるものです。bmpファイルからppmやpgmへの一括変換はできたのですが、それらが生(raw)なので、つまりP6なので処理に困ってます。P3にしたいのですが大量のPPM、PGMをまとめてASCIIに変換することは可能でしょうか?よろしければ教えていただけると助かります。 |
>>4302 tana 試してませんが、ppmtogif して giftoppm で戻すとか。 |
giftoppmって一度に多数のファイルを変換できますか? |
>>4304 tana 知りませんが、もしできないとしても for i in *.ppm; do ppmtogif < $i | giftoppm > out/$i; done とか、 ls *.gif | sed 's/\(.*\)/ppmtogif < \1 | gitoppm > out\/\1/' | sh とか。 拡張子は適当に変更するということで。 |
blog なるものを始めてみました。 http://68user.blog27.fc2.com/ 入力が非常に面倒なのですが (HTML 手打ちと変わらない)、世の人たちは 使いこなしているんですかねぇ…。 |
日記を書く習慣の無い僕にとっては、blogを使う利点が未だに理解できないです。 もし、68userさんの視点でその利点を見出せたら、是非とも教えていただきたく、 宜しくお願いいたします。 追伸 FreeBSDでの活動は、今でもされているのですか? |
>>4307 へにか 技術的なことは、最終的に web にまとめたいと思っています。しかしそれを 行うにはある程度の時間と労力がかかります。よって、とりあえず殴り書きを するネタ帳として blog を活用できないかと考えました。 また、 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=4061 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=3774 のような、ひとつのコンテンツとしてまとめづらいメモを書く場所として 適切ではないだろうか、と思っています。 それと、コメントやトラックバックという仕組みがあるため、web よりは フィードバックが得られるのではないかと。 しかし、perl+DBI のネタを書いてみてわかったのですが、わたしは完璧主義者 なので、結局はエディタで下書き・推敲しないと気がすまないようです。あまり blog 向きではないのかもしれません。 あとこれは愚痴ですが、入力が非常に面倒です。まず、WRAP="OFF" 属性が付いて いない TEXTAREA 要素の相手をすることが苦痛です。 また、ソースを張る際に <PRE>〜</PRE> で囲んでみましたが、行間に変な間が 空いてしまい、結局スペースを に置換して張っていたりします。 「blog は更新が簡単」と世の人は言いますが、fc2 に限れば嘘です。 > FreeBSDでの活動は、今でもされているのですか? 最近はしていませんが、するべき立場にあります。すべてはモチベーションの 問題です。 |
>>4308 68user なるほど。コメントがつけられる掲示板のような使い方+トラックバックですね。 コメント:誰でも簡単に書きやすい。 トラックバック:細かい指摘事項が伝わりやすい。 ってところでしょうか。仕組みとしては、やりたいことに一番近そうに見えますが、 >「blog は更新が簡単」と世の人は言いますが、fc2 に限れば嘘です。 恐らく、今流行っているタイプのblogの使用目的に合致していない、と思います。 ・・・と言いつつ、実はblogを理解して無いので、間違った事を言っているかもしれませんが。 >すべてはモチベーションの問題です それはいえるかもしれませんね。元同僚は、とある部分のソースを書くという 立場にいるそうですが、結構(手続きが?)大変だ、といってましたし。 自分の時間がとれて、収入に余裕があって、FreeBSDに絶対に貢献したいという 意思が無ければ、なかなか腰が上がらないのだと、勝手ながら推測しております。 |
突然ですみません、UNIX初心者です。 UNIXにて以下の様な事がしたいのですが、よい方法があれば教えて下さい。 随時追加されるあるファイル(aaa.txt)の内容を行単位ででCプログラムで読込みたい。 条件) 1.aaa.txtは行単位に随時追加される。 2.Cプログラムに渡すのはある文字が含まれる行のみ。 以下の様なことを試したのですが、うまくいきませんでした。 tail -f aaa.txt | grep ABC | Cプログラム ※Cプログラムは今の所、標準入力(gets)から読み込むだけのプログラムです。 |
>>4309 へにか > なるほど。コメントがつけられる掲示板のような使い方+トラックバックですね。 そうですね。ただ、コメントやトラックバックより、思いついたことを すぐに書くための場所、という方がわたしにとっては重要かなと思っています。 > 恐らく、今流行っているタイプのblogの使用目的に合致していない、と思います。 いや、ただインタフェースがイマイチなだけだと思います。空白を に 変換してくれればそれで解決する話ですから。 >>4310 UNIX初心者 こちらを。 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=2800 |
>tail -f log | perl -ne '$|=1;print if m/foo/' >> log2 で試してみたのですが、perlがインストールされていない為、エラーとなってしまいました。 今回は急ぐので、プログラムで対応してしまいました。 また、利用させて下さい、ありがとうございました。 |
>>4312 UNIX初心者 解決したとのことなので返信不要ですが、perl がないなら % tail -f aaa.txt | awk '/ABC/{print;system("")}' | Cプログラム ですかね。FreeBSD 5.2.1-RELEASE ではうまくいきました。 |
Solaris8のBシェルで、CSV形式のデータのソートを行っています。 数字順にソートしたいのですが、ソート対象の列が半角英数のため 数字順になりません。うまい方法はないでしょうか。 英字が先頭にある場合は、英字を取り除いて数字順にしたいのです。 うまい方法はないでしょうか。 sortコマンドだけでは、だめでした。 --データ 山本 こうたろう,企画,100 山下 大介,企画,A101 山田 太郎,営業,80 山田 花子,営業,A92 山田 一郎,営業,A82 鈴木 一郎,販売,85 鈴木 一郎,海外,1001 松井 英樹,海外,2001 斉藤 次郎,製造,125 佐藤 三郎,組立,A124 武藤 五郎,検査,130 --結果 山田 太郎,営業,80 山田 一郎,営業,A82 鈴木 一郎,販売,85 山田 花子,営業,A92 山本 こうたろう,企画,100 山下 大介,企画,A101 佐藤 三郎,組立,A124 斉藤 次郎,製造,125 武藤 五郎,検査,130 鈴木 一郎,海外,1001 松井 英樹,海外,2001 sortコマンドの「-n」を付けてやってみたのですが、数値として判断するため 上手くできません。 また、付けないと、数値順に並んでくれません。 |
>>4314 hagu 訂正です。 名前の前に社員IDがあり、 半角英数字でソートし、社員IDでソートとなります。 データは、「社員ID、名前、仕事、コード」 コードの半角英数字で数字順に並び替えで、 コードが同じな場合は、社員IDで並び替えです。 英字が先頭にある場合は、英字を取り除いて数字順にしたいのです。 No.4314の結果にしたいのです。 |
>>4314 hagu 101 と A101 という社員 ID が存在する可能性があるか、存在するならソート順は どうするかという仕様が不明確ですが、それは置いておくとして。 > 山本 こうたろう,企画,100 > 山下 大介,企画,A101 > 山田 太郎,営業,80 > 山田 花子,営業,A92 わたしなら一度 sed などで 山本 こうたろう,企画,,100 山下 大介,企画,A,101 山田 太郎,営業,,80 山田 花子,営業,A,92 と別項目にし、sort して、再度 sed で元に戻します。 |
>>4316 68user ありがとうございます。 一度、コードの値を分解しには、気がつきませんでした。 いいかも知れません。 >101 と A101 という社員 ID が存在する可能性があるか、存在するならソート順は >どうするかという仕様が不明確ですが、それは置いておくとして。 コードでソートした後、同じコードないで、社員IDをソートします。 ただし、数字のコードは、数字のコード内で、 英字付きのコードは、英字付きコード内で、 社員IDを並びかえます。 |
お世話になります。 C言語でHTTPクライアントを作成しています。ここのサイトもありますが、自作で行いました。 AのHPを取得してうまく表示されますが、BのHPを取得すると、表示されません。 取得したページのヘッダ情報はどっちも異常はありませんでした。 デバックではどっちでも表示されます。でも、BのHPが取得しても表示されません。 何か助言をして頂けたら幸いです。よろしくお願い致します。 |
>>4318 匿名希望 - 現象が再現する最小限まで削ったソースを提示してください。 - A と B の URL を提示してください。 - そちらで実行した結果を提示してください (ヘッダ情報とかデバッグを含む全部) - OS・コンパイラなどの情報を提示してください。 なお、UNIX 以外であれば、わたしはコンパイル環境がないのでわかりません。 |
初めて投稿します。 自分はSSLを組み込もうとしていろいろ調べているんですが、 調べていると、WindowsでのSSLの設置方法がかかれてないんです。 やっっぱりリナックスで設置したほうがいいのでしょうか? |