68user's page 掲示板

Prev< No. 4294〜4374> Next  [最新発言に戻る] [過去ログ一覧]
No. 4294 # hagu 2005/09/16 (金) 02:32:13
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
と出力したいのです。

お願いします。

No. 4295 # 68user 2005/09/16 (金) 03:18:00
>>4294 hagu
案1. file1.txt を while で 1行ずつ読み込み、読み込んだ行が
          file2.txt に含まれるかを grep で調べる。
案2. file1.txt と file2.txt をそれぞれ sort し、diff をとって、
          行頭が < か、> かを調べる。重複する行は…どうしましょうねぇ。
案3. perl でハッシュに突っ込む。3行くらいで書けそうな気がします。

No. 4296 # hagu 2005/09/16 (金) 08:40:58
>> 4295

perl使用したことありません。
書くとしたらどうなりますか。

案1ですと、file1.txtで調べたあと、file2.txtのみで存在する物も調べるので
同様の処理が必要になります。重複する行が2回でることになります。

No. 4297 # 68user 2005/09/16 (金) 10:06:43
>>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 のみ
    ・行頭がスペースなら重複行
ですかね。

No. 4298 # シャチ 2005/09/17 (土) 11:00:02
>>4294 hagu

1.file1.txtとfile2.txtを辞書順にソートする。
2.diffコマンドで、file1.txtとfile2.txtの差異を表示する。
diffコマンドの出力結果の見方は、ご存じですよね。
">"は、右側に指定したファイル内に差異があることを示す。
"<"は、左側に指定たファイルにある差異があることを示す。

3.grepとかcutを使用して見やすいように編集。
4.file1.txtかfile2.txtをキーにして、grepで存在する文字列だけを抽出。

で、出来ると思います。

No. 4299 # has 2005/09/20 (火) 23:20:36
>>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,/'

順序よく並んでしまいますが。

No. 4300 # hagu 2005/09/21 (水) 23:45:22
>> 4299
ありがとうございます。
確認してみます。

No. 4301 # hagu 2005/09/22 (木) 09:55:59
>>4299 has

ありがとうございます。
期待していた結果が得られました。

commというコマンドがあるのですね。
知りませんでした。
勉強になりました。

No. 4302 # tana 2005/10/01 (土) 17:56:09
突然すみません。私は、いま卒業研究で動画像を処理しようとしてるものです。bmpファイルからppmやpgmへの一括変換はできたのですが、それらが生(raw)なので、つまりP6なので処理に困ってます。P3にしたいのですが大量のPPM、PGMをまとめてASCIIに変換することは可能でしょうか?よろしければ教えていただけると助かります。

No. 4303 # 68user 2005/10/01 (土) 19:00:45
>>4302 tana
試してませんが、ppmtogif して giftoppm で戻すとか。

No. 4304 # tana 2005/10/01 (土) 22:40:59
giftoppmって一度に多数のファイルを変換できますか?

No. 4305 # 68user 2005/10/02 (日) 15:35:18
>>4304 tana
知りませんが、もしできないとしても
      for i in *.ppm; do ppmtogif < $i | giftoppm > out/$i; done
とか、
      ls *.gif | sed 's/\(.*\)/ppmtogif < \1 | gitoppm > out\/\1/' | sh
とか。

拡張子は適当に変更するということで。

No. 4306 # 68user 2005/10/02 (日) 15:37:52
blog なるものを始めてみました。
    http://68user.blog27.fc2.com/

入力が非常に面倒なのですが (HTML 手打ちと変わらない)、世の人たちは
使いこなしているんですかねぇ…。

No. 4307 # へにか [URL] 2005/10/03 (月) 06:52:49
日記を書く習慣の無い僕にとっては、blogを使う利点が未だに理解できないです。
もし、68userさんの視点でその利点を見出せたら、是非とも教えていただきたく、
宜しくお願いいたします。

追伸
FreeBSDでの活動は、今でもされているのですか?

No. 4308 # 68user 2005/10/03 (月) 15:43:22
>>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> で囲んでみましたが、行間に変な間が
空いてしまい、結局スペースを &nbsp; に置換して張っていたりします。
「blog は更新が簡単」と世の人は言いますが、fc2 に限れば嘘です。

> FreeBSDでの活動は、今でもされているのですか?
最近はしていませんが、するべき立場にあります。すべてはモチベーションの
問題です。

No. 4309 # へにか [URL] 2005/10/03 (月) 18:58:36
>>4308 68user
なるほど。コメントがつけられる掲示板のような使い方+トラックバックですね。
コメント:誰でも簡単に書きやすい。
トラックバック:細かい指摘事項が伝わりやすい。
ってところでしょうか。仕組みとしては、やりたいことに一番近そうに見えますが、
>「blog は更新が簡単」と世の人は言いますが、fc2 に限れば嘘です。
恐らく、今流行っているタイプのblogの使用目的に合致していない、と思います。
・・・と言いつつ、実はblogを理解して無いので、間違った事を言っているかもしれませんが。

>すべてはモチベーションの問題です
それはいえるかもしれませんね。元同僚は、とある部分のソースを書くという
立場にいるそうですが、結構(手続きが?)大変だ、といってましたし。
自分の時間がとれて、収入に余裕があって、FreeBSDに絶対に貢献したいという
意思が無ければ、なかなか腰が上がらないのだと、勝手ながら推測しております。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 4310 # UNIX初心者 2005/10/06 (木) 00:40:29
突然ですみません、UNIX初心者です。
UNIXにて以下の様な事がしたいのですが、よい方法があれば教えて下さい。
随時追加されるあるファイル(aaa.txt)の内容を行単位ででCプログラムで読込みたい。
条件)
1.aaa.txtは行単位に随時追加される。
2.Cプログラムに渡すのはある文字が含まれる行のみ。

以下の様なことを試したのですが、うまくいきませんでした。
tail -f aaa.txt | grep ABC | Cプログラム
※Cプログラムは今の所、標準入力(gets)から読み込むだけのプログラムです。

No. 4311 # 68user 2005/10/06 (木) 00:57:33
>>4309 へにか
> なるほど。コメントがつけられる掲示板のような使い方+トラックバックですね。
そうですね。ただ、コメントやトラックバックより、思いついたことを
すぐに書くための場所、という方がわたしにとっては重要かなと思っています。

> 恐らく、今流行っているタイプのblogの使用目的に合致していない、と思います。
いや、ただインタフェースがイマイチなだけだと思います。空白を &nbsp; に
変換してくれればそれで解決する話ですから。

>>4310 UNIX初心者
こちらを。
http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=2800

No. 4312 # UNIX初心者 2005/10/06 (木) 23:11:25
>tail -f log | perl -ne '$|=1;print if m/foo/' >> log2
で試してみたのですが、perlがインストールされていない為、エラーとなってしまいました。
今回は急ぐので、プログラムで対応してしまいました。
また、利用させて下さい、ありがとうございました。

No. 4313 # 68user 2005/10/07 (金) 02:17:15
>>4312 UNIX初心者
解決したとのことなので返信不要ですが、perl がないなら
    % tail -f aaa.txt | awk '/ABC/{print;system("")}' | Cプログラム
ですかね。FreeBSD 5.2.1-RELEASE ではうまくいきました。

No. 4314 # hagu 2005/10/15 (土) 19:06:52
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」を付けてやってみたのですが、数値として判断するため
上手くできません。
また、付けないと、数値順に並んでくれません。

No. 4315 # hagu 2005/10/15 (土) 19:19:00
>>4314 hagu
訂正です。
名前の前に社員IDがあり、
半角英数字でソートし、社員IDでソートとなります。
データは、「社員ID、名前、仕事、コード」
コードの半角英数字で数字順に並び替えで、
コードが同じな場合は、社員IDで並び替えです。
英字が先頭にある場合は、英字を取り除いて数字順にしたいのです。
No.4314の結果にしたいのです。

No. 4316 # 68user 2005/10/15 (土) 19:51:38
>>4314 hagu
101 と A101 という社員 ID が存在する可能性があるか、存在するならソート順は
どうするかという仕様が不明確ですが、それは置いておくとして。

> 山本 こうたろう,企画,100
> 山下 大介,企画,A101
> 山田 太郎,営業,80
> 山田 花子,営業,A92
わたしなら一度 sed などで
    山本 こうたろう,企画,,100
    山下 大介,企画,A,101
    山田 太郎,営業,,80
    山田 花子,営業,A,92
と別項目にし、sort して、再度 sed で元に戻します。

No. 4317 # hagu 2005/10/15 (土) 23:47:12
>>4316 68user

ありがとうございます。
一度、コードの値を分解しには、気がつきませんでした。
いいかも知れません。

>101 と A101 という社員 ID が存在する可能性があるか、存在するならソート順は
>どうするかという仕様が不明確ですが、それは置いておくとして。
コードでソートした後、同じコードないで、社員IDをソートします。
ただし、数字のコードは、数字のコード内で、
英字付きのコードは、英字付きコード内で、
社員IDを並びかえます。

No. 4318 # 匿名希望 2005/10/18 (火) 19:47:44
お世話になります。
C言語でHTTPクライアントを作成しています。ここのサイトもありますが、自作で行いました。
AのHPを取得してうまく表示されますが、BのHPを取得すると、表示されません。
取得したページのヘッダ情報はどっちも異常はありませんでした。
デバックではどっちでも表示されます。でも、BのHPが取得しても表示されません。
何か助言をして頂けたら幸いです。よろしくお願い致します。

No. 4319 # 68user 2005/10/18 (火) 23:11:48
>>4318 匿名希望
- 現象が再現する最小限まで削ったソースを提示してください。
- A と B の URL を提示してください。
- そちらで実行した結果を提示してください (ヘッダ情報とかデバッグを含む全部)
- OS・コンパイラなどの情報を提示してください。

なお、UNIX 以外であれば、わたしはコンパイル環境がないのでわかりません。

No. 4320 # SSL初心者 2005/10/19 (水) 16:09:35
初めて投稿します。
自分はSSLを組み込もうとしていろいろ調べているんですが、
調べていると、WindowsでのSSLの設置方法がかかれてないんです。
やっっぱりリナックスで設置したほうがいいのでしょうか?

No. 4321 # 68user 2005/10/20 (木) 01:13:13
>>4320 SSL初心者
まずは検索を。
http://www.google.co.jp/search?q=windows+apache2+ssl&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8

No. 4322 # マッケーブ 2005/10/20 (木) 15:39:43
お世話になります。
「マッケーブの循環的複雑度」を出力するツールを探しており、
当ホームページから コマンドcccc(C言語・C++・Java のソース
コードのステップ数を調べるツール。)を探し当てました。
ところが、身近にあるサーバで試してみると、
$ cccc hoge.java
-bash: cccc: command not found
と出力されます。

コマンドccccを実行するための条件等、ありますでしょうか。
ご教示、よろしくお願いします。

No. 4323 # ミケフォ [E-mail] 2005/10/20 (木) 18:12:00
初めまして。
『UNIXの部屋』の localtime(3) のサンプルコードにある
tm_timeの一連の変数参照が間違っています。

No. 4324 # hoge 2005/10/20 (木) 22:15:02
>> 4322
http://x68000.q-e-d.net/~68user/unix/pickup?Command+not+found

2 又は 6 では無かろうか.

No. 4325 # Netboy 2005/10/22 (土) 14:28:50
サーバーの件でメールをお送りしました

No. 4326 # SSL初心者 2005/10/26 (水) 12:59:02
すみません。SSLをWindowsで設定しているんですが、
Apacheのインストールで下記のエラーが出ます。

(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、
たはポートのどれか 1 つ のみを使用できます。 : make_sock: could not bind to
dress 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

これは、どういった意味のエラーなのかさっぱりわかりません。
自分で調べてもどの方面から調べるのかわからずじまいで投稿しました。
環境は以下のとうりです。

OS - Windows98
Apache - Apache_2.0.55-Openssl_0.9.8a-Win32をダウンロード
OpenSSL - Win32OpenSSL-v0.9.8を使用

参考HP - www.rinzo2.jp/~rinzo/apache_ssl/apache_and_ssl_00.htm

ご意見お待ちしております

No. 4327 # awk初体験。 2005/10/26 (水) 14:54:35
シェル内にて以下の記述を入れるとエラーが発生します。

■エラー発生箇所
cat ./temp.txt | awk 'BEGIN{FS=","}{if(match($1,"^${_XXX_}")!=0){print $0}}' > ./test.csv

■出力エラー
awk: There is a regular expression error.
                ?, *, or + not preceded by valid regular expression
  The source line number is 1.
  The error context is
                                  >>> BEGIN{FS=","}{if(match($1,"^${_XXX_}") <<<

"^${_XXX_}"の部分がエラーとなっているようですがここでは変数は使用できないのでしょうか?

No. 4328 # 68user 2005/10/27 (木) 11:45:32
>>4326 SSL初心者
「OS 10048」で検索した結果の 1番目に出てくるのがおそらく答えです。
    http://www.google.co.jp/search?q=OS+10048&start=0&start=0&hl=ja&lr=lang_ja

>>4327 awk初体験。
ウチの環境ではエラーにならないのでよくわかりませんが、
    ${_XXX_}
って変数のつもりで書いてるんですよね? どこで ${_XXX_} に値をセット
しているのですか?

もしシェルスクリプトでシェル変数や環境変数にセットしているのなら、
引数全体を '' で囲んでいるので置換されません。というわけで

    cat ./temp.txt | awk 'BEGIN{FS=","}{if(match($1,"^'${_XXX_}'")!=0){print $0}}' > ./test.csv

などと ${_XXX_} を外に出します。

No. 4329 # 68user 2005/10/27 (木) 11:58:11
>>4323 ミケフォ
> 『UNIXの部屋』の localtime(3) のサンプルコードにある
> tm_timeの一連の変数参照が間違っています。
ありがとうございます。bugid 18 として登録しました。
    http://x68000.q-e-d.net/~68user/bugnote/viewbug.php?projectid=1&bugid=18

# 登録する暇があるなら、さっさと直せと。

No. 4330 # Netboy 2005/10/27 (木) 12:02:11
すみません,昨日18時頃から本日11時まで
サーバーの通信が切れていました.

昨日13時頃に回線工事があって無事完了したのですが,
終端装置の接続が雑だったらしく,17時頃に突然接続が落ちました.

すぐ業者に連絡したのですが既に営業時間外で,
朝まで修理を呼べませんでした.
本日11時に業者が来て直りました.

ご報告まで.

No. 4331 # キック 2005/10/27 (木) 16:56:13
お世話になります。

C言語でHTTPクライアントを作成してますが、HTTPSの場合のポート番号が
サイトを探しても見つからないですが、ご存知でしょうか?
よろしくお願い致します。

No. 4332 # 68user 2005/10/27 (木) 17:12:26
>>4330 Netboy
対処いただきありがとうございます。IP アドレスの件はもう少々お待ちください。

>>4331 キック
「https ポート番号」で検索したら一番最初に出てきます。
    http://www.google.co.jp/search?q=https+%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7&hl=ja&lr=lang_ja

No. 4333 # キック 2005/10/27 (木) 17:19:59
>>4332 68user

ありがとうございます。
初歩的ですみません(^ ^;)>

No. 4334 # hagu 2005/10/28 (金) 10:37:09
シェルで、ftpを自動で実行しています。
ftpの接続、ログインの判定や、ファイルのput/getの判定
ができたか判断したいのですが、できるのでしょうか。
エラーが発生したら、「exit 1;」などで終了させて、その
ステータスを判断するといったことはできないのでしょうか。

-----------------
ftp -v -n ${SERVER} <<END >/dev/null
user ${FTP_USER_ID} ${FTP_PASSWORD}
cd ${FTP_DIRECTORY}
lcd ${LOCAL_DIRECTORY}
get ${GET_FILE}
bye
END

環境:
    Solaris8i
    Bシェル

No. 4335 # awk初体験。 2005/10/28 (金) 17:15:32
No. 4327 で質問させていただきました。
変数はシェル内で実行していました。
そのため""で括った所上手くいきました。
ご回答ありがとうございます。

さらに別の質問させてください。
カンマ及びスラッシュを区切り文字としたいのですが…
-FオプションやFS=の指定で複数の区切り文字を指定することはできるのでしょうか?

No. 4336 # zsh 2005/10/30 (日) 11:51:51
>>4335 awk初体験。
区切り文字に正規表現を使用できるawkであれば可能です。
(gawkやnawkなら使用可能ですが、Solaris標準のawk等では使用できません。)

$ nawk -F"[,/]" '{ .... }' file
$ nawk 'BEGIN{ FS="[,/]" } { .... }' file

No. 4337 # 68user 2005/10/30 (日) 15:35:42
2005/10/29(金) 00:00:00 ごろから IP アドレスの変更・それに伴う DNS 設定変更を
行いました。Refresh とか Retry とか Expire などを理解していないので、何も対策
せずいきなり切り替えました。そのせいで つながらなかった人もいると思いますが、
ご迷惑をおかけしました (わたしも数時間つながらなかった)。

ご協力ありがとうございました>Netboy さん

>>4323 ミケフォ
遅くなりましたが、修正しました。
ご指摘ありがとうございました。

# http://x68000.q-e-d.net/~68user/bugnote/viewbug.php?projectid=1&bugid=18

>>4334 hagu
わたしなら Perl の Net::FTP モジュールなどできっちりエラーチェックしますが、
どうしても ftp コマンドを使わざるをえないなら、
    - ftp コマンドに -d オプションなどをつけて実行結果のログをとる。最後に
        ログを解析してステータスコードに 4xx 系・5xx 系 がないことをチェックする。
    - 接続した時点でリモートに同名のファイル名がないならば、get/put を行って、
        最後に ls して、結果をログに保存する。ls の結果を解析し、ファイル一覧・
        ファイルサイズ・ファイル個数などのチェックを行う。
くらいしかないような気がします。

No. 4338 # 68user 2005/10/30 (日) 15:41:23
>>4337 68user
> 2005/10/29(金) 00:00:00 ごろから
2005/10/29(土) 00:00:00 の誤りでした。

No. 4339 # TKG 2005/10/31 (月) 21:57:21
A君とB君(ユーザーIDはそれぞれAとB)は同じグループG(グループIDはG)に属しているとします。
A君は、自分のホームディレクトリ(~A)にあるディレクトリDの中の全てのファイルを、B君など同じ
グループに属する人にだけ閲覧可能にしたいと考えました。ただし、A君はディレクトリD以外の
ファイル・ディレクトリは(それらのリストを取る(lsコマンド)ことも許可したくありません。
A君はどのようなパーミッションを設定すればよいでしょうか?

No. 4340 # 68user 2005/11/01 (火) 01:23:05
>>4339 TKG
    ~A/ 710
    ~A/D/ 750
    ~A/X/ (D 以外) 700
でしょうか。

No. 4341 # 2005/11/02 (水) 11:36:55
Solarisでシェルスクリプトを起動する場合。
$ csh script.cshと入力しなければなりませんが、
最初のcsh を省略して$ script.cshで起動する方法を教えて下さい。
宜しくお願いします。

No. 4342 # zsh 2005/11/02 (水) 17:49:42
> 68user様
http://x68000.q-e-d.net/~68user/unix/genre.html#genre22
にheadが二つ表示されています。

>>4341
UNIXの部屋を読めば判ると思いますが・・・
  1.スクリプトの一行目にシェルのパスを指定する。
  2.環境変数PATHを設定する。
  3.スクリプトに実行権をつける。
といったところでしょうか。
http://x68000.q-e-d.net/~68user/unix/pickup?Command+not+found

No. 4343 # hoge 2005/11/02 (水) 18:54:10
>> 誠さん

4342 で言われている PATH の設定は csh が置かれている場所にパスを通すって
意味であって、PATH に "."(カレントディレクトリ) を加えるって話では無い筈です。
従って、 単に script.csh ではなく ./script.csh って起動方法になると思います。

PATH に "." を加える事の問題とか、csh スクリプトを覚えるよりも sh 系の
スクリプトを覚えた方が良いって話は検索すれば出てきますので読んでみましょう。

No. 4344 # zsh 2005/11/03 (木) 13:34:58
>>4343 hoge
スクリプト専用のの格納ディレクトリがあるのかと思い
PATHの設定が必要と書きました。
・・・・ちょっと意地悪したくなったのも事実ですが。

No. 4345 # hagu 2005/11/04 (金) 17:19:50
>>4337 68user
返事が遅くなって申し訳ありません。
アドバイスありがとうございます。
ログに出力し、ログをチェックする方法でやってみます。

No. 4346 # hagu 2005/11/04 (金) 17:23:52
sedを使用して大文字から小文字に変換したいのですが、
なかなか上手くいきません。
例えば、「YAMADA」を「Yamada」と先頭の1文字目は大文字で、
2文字目以降を小文字に変換したいのですが、以下の様にsed
を使ってやったのですが上手く行きません。
sedでは、無理なのでしょうか。
環境は、Solaris8、Bシェルです。

----------------------
NM=Ya1AMADA
echo $NM | sed 's/[A-Z].*/[a-z]/g'

NM=YAMADA
echo $NM | sed 's/\(.\)[A-Z]*/\1/g'

No. 4347 # 2005/11/04 (金) 18:25:03
>>4346 hagu
多分、sedだけでは無理だと思います。

sedを使わなくても、awkだけでも可能です。

echo $NM | nawk '{for(j=i=1;i<=length($0); i++) if(i==1) {NM[i]=substr($0,i,1)} else {NM[i]=tolower(substr($0,i,1))}} END{for(count in NM) printf("%c",NM[count]); printf("\n")}'

No. 4348 # hagu 2005/11/04 (金) 21:58:31
>>4347

試してみましたが、出方が変です。
amadaY となります。

No. 4349 # マーブル 2005/11/05 (土) 08:16:10
始めまして、ネットワークプログラミング周辺読ませて頂きました。
簡潔なソースで読みやすかったです。
お礼に掲示板カキコ、それにしてもみなさん勉強熱心ですね(笑

----------------------------------------
echo $NM | \
sed -e h -e 's/^\(.\)\(.*\)/\1/g' \
-e 'y/[abcdefghijklmnopqrstuvwxyz]/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/' \
-e x \
-e 's/^.\(.\)/\1/g' \
-e 'y/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/[abcdefghijklmnopqrstuvwxyz]/' \
-e H \
-e g \
-e 's/\n//'
----------------------------------------

なんとなしsedの勉強してしまった、本買う気にはならないけどね。
http://web.archive.org/web/19961202111128/http://yase.yajima.kuis.kyoto-u.ac.jp/staffs/sengoku/sedlec/

No. 4350 # has 2005/11/05 (土) 11:03:28
>>4346 hagu
もしperlならこんな感じなんでしょうか?
echo $NM | perl -ple 'y/A-Z/a-z/;substr($_,0,1)=~y/a-z/A-Z/;'

No. 4351 # 2005/11/05 (土) 13:43:04
>>4347
>>4348 hagu

連想配列の場合、表示の順序は、ハッシュ法に従うのでランダムとなります。
すみません。

echo $NM | nawk '{for(i=1;i<=length($0); i++) if(i==1) {NM[i]=substr($0,i,1)} else {NM[i]=tolower(substr($0,i,1))}} END{for(j=1; j<i; j++) printf("%c",NM[j]); printf("\n")}'

No. 4352 # hagu 2005/11/05 (土) 13:58:38
>>4349 マーブル
凄い。
sedだけでですね。
でも、凄く、複雑すぎます。

>>4351
今度は、期待したいた結果が得られました。
awkを使っているのも複雑ですね。

No. 4353 # zsh 2005/11/05 (土) 14:28:08
>>4352 hagu
これじゃだめ?

$ echo $NM | nawk '{ a=toupper(substr($0,1,1)); b=tolower(substr($0,2)); printf "%s%s\n",a,b; }'

No. 4354 # 2005/11/05 (土) 23:53:05
>>4353 zsh

そうですよね。
substr()で2文字目以降すべてを変換してしまえばいんですよね。
何、ループで1文字ずつ変換し、表示しているんだろう。

No. 4355 # マーブル 2005/11/06 (日) 02:06:34
あまり知られていないscanfの用法。
既出でしたか残念。>>4041>>4042
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html

以下同意
-------------------------------------
sscanf(host_path,"%[^/]%s",host,path);
-------------------------------------
p = strchr(host_path, '/');
if ( p != NULL ){
    strcpy(path, p);
    *p = '\0';
    strcpy(host, host_path);
} else {
    strcpy(host, host_path);
}
-------------------------------------

No. 4356 # マーブル 2005/11/08 (火) 01:39:16
fdopen()で作成されたストリームが閉じられたときにファイル記述子も 閉じられる。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fdopen.3.html
よって以下のページのL:125は不要です。
http://x68000.q-e-d.net/~68user/net/c-http-2.html

No. 4357 # 68user 2005/11/08 (火) 02:42:15
>>4356 マーブル
ありがとうございます。とりあえず POSIX を確認させてください (明日以降)。
    http://www.opengroup.org/onlinepubs/009695399/functions/fdopen.html

No. 4358 # 68user 2005/11/08 (火) 02:51:42
>>4357 68user
明日以降と言いつつ今確認してみましたが、POSIX にはそういう記述は
ないように見えます。また、Solaris9 のマニュアルにも書いてないように
見えます。
    http://www.freebsd.org/cgi/man.cgi?query=fdopen&sektion=3C&manpath=SunOS+5.9

しかし BSD ならば、4.4BSD-Lite2 にはそのような記述があります。
    http://www.freebsd.org/cgi/man.cgi?query=fdopen&manpath=4.4BSD+Lite2&format=html

Solaris や HP-UX が手元にある方にお願いなのですが、fdclose して fclose した
ときにソケットディスクリプタがクローズされるかどうか truss コマンドなどで
確認していただけないでしょうか (わたしのまわりは FreeBSD と Linux しかないので)。

いずれにせよ何かしらの補足は追記したいと考えています。

No. 4359 # 68user 2005/11/08 (火) 03:00:02
>>4358 68user
> fdclose して fclose したときに
「fdopen して fclose したときに」の誤りでした。

ちなみに「UNIX ネットワークプログラミング第2版」からは、この件についての
記述を読み取ることはできませんでした。

No. 4360 # マーブル 2005/11/08 (火) 04:30:12
>>4359 68user
機種依存等深く考えずに書き込んでしまって申し訳ございません。
また知合いに話せる人がいない為に決めつけたような書き込みになってしまったこともお詫びします。

基本的にFILE構造体にfileディスクリプタが含まれているものと理解していたもので、
fclose時に連動してcloseされるかな?と単純に考えてしまいました。

trussで確認した結果が以下でcloseされているようでした(これおもしろいですね)
SunOS eibw23 5.9 Generic_112233-03 sun4u sparc SUNW(Solaris8か9)
-----------------------------------------------------------
read(0, 0xFF3414EC, 1024) (sleeping...)
read(0, "\n", 1024) = 1
llseek(3, 0, SEEK_CUR) = 0
close(3) = 0
read(0, 0xFF3414EC, 1024) (sleeping...)
read(0, "\n", 1024) = 1
_exit(0)

No. 4361 # マーブル 2005/11/08 (火) 04:33:00
>>4360 マーブル
うゎ、アドレス込みで貼っちまった、ハズカシィ

No. 4362 # マーブル 2005/11/08 (火) 04:48:39
>>4360 マーブル
opensolarisがsolarisとどれだけ違うかわかりませんが、
http://cvs.opensolaris.org/source/xref/on/usr/src/lib/libc/port/stdio/fdopen.c#64
fdの値は単純に渡されているように見えます。
(↑のサイト使い安くて良く使ってます、BSDでこのような感じのページご存知ですか?)

No. 4363 # 68user 2005/11/08 (火) 13:23:30
>>4360 マーブル
昨日は変なことを書いてしまいました。fclose したんだから close するのは
当然ですよね。まぁ fdopen したものはフラッシュだけ行って close しない
実装があっても不思議ではないですが、素直に考えれば close するはず。

よって、125行目の close は削除します。

>>4362 マーブル
> (↑のサイト使い安くて良く使ってます、BSDでこのような感じのページご存知ですか?)
普通の cvsweb でよければ、以下のものが cvsgraph が組み込まれているのでよく使います。
    http://cvsweb.allbsd.org/cvsweb.cgi/src/lib/libc/stdio/fdopen.c
ソース閲覧なら GLOBAL を使ったFreeBSD Source Code Tour が便利ですが、ファイル名が
ころころ変わるので URL を保存しておいても役に立たないのがが困りものです。
    http://snapshots.jp.freebsd.org/tour/
    http://snapshots.jp.freebsd.org/tour/current/userland/cgi-bin/global.cgi?pattern=fdopen&id=&type=definition
    http://snapshots.jp.freebsd.org/tour/current/userland/S/9687.html#53

OpenSolaris のソースを見られるところは知りませんでした。今後活用させて
いただきます。

No. 4364 # がちゃぴ 2005/11/08 (火) 15:45:39
初めましてWindowsユーザですが、仕事上 LinuxやCVSを使うことがあります。
コマンドをなかなか覚えられなくて、いつも参考にさせて頂いています。

No. 4365 # hagu 2005/11/08 (火) 18:05:43
>>4353 zsh

凄いです。
変換されました。

No. 4366 # anonymous 2005/11/08 (火) 22:03:49
よくパーミッションでrは読む権利を、wは書く権利を、
xは実行する権利を与えるといいますが、それぞれの権利が
与えられている時、いない時は具体的にどのようなコマンド
が有効であるのか、いまいちはっきり理解できません。
どなたか詳しくをしえてください。

No. 4367 # has 2005/11/09 (水) 00:01:04
>>4366 anonymous
> それぞれの権利が与えられている時、いない時は具体的にどのようなコマンドが
> 有効であるのか
何か哲学的なニオイがするので(?)、そもそも私が答えられる内容でも無い気は
しますがそれでもよければ教えてください。
ええと、ちょっと見た限りでは書き込み中の「有効」の意味がよくわかりません。
もしかしたら具体的に何か目的があるんでしょうか。
あと、パーミッションが与えられているのはプログラム?読み書きするファイル?

No. 4368 # 68user 2005/11/09 (水) 00:14:27
>>4364 がちゃぴ
ありがとうございます。ご意見・ご指摘がありましたら遠慮なくどうぞ。

なお、世の中いろんな人がいますので、文章の一部を削除させていただきました。
削除した部分に関する話題はご遠慮いただきたく思います。ご理解ください。

>>4366 anonymous
紛らわしいのでハンドルを「68user」から「anonymous」と変更しました。
今後は適切なハンドルを使用してください。

No. 4369 # マーブル 2005/11/09 (水) 01:36:27
>>4363 68user
御回答ありがとうございました。
また情報交換ができてうれしく思います、重ねてお礼申し上げます。

>>4367 has
話に割り込んでしまってごめんなさい。
>>4366 anonymous
コマンドが読み書きするファイルのアクセス権限を考慮して判断するのが良いと思います。
例えばmountコマンドでは一般userにデバイスへのアクセス権限がないので(当方FreeBSD)、
コマンドは実行できてもmountはできません。
また許可を与えたい場合、デバイスファイルのパーミッションを変更すれば使用できますが、
いろいろ問題がありそうなので、
http://x68000.q-e-d.net/~68user/unix/pickup?sudo
の方法を取ったりするそうです。

ついでにちょっと変な話。
実行権限がないディレクトリに対して移動(cd)もディレクトリの内容の確認も(ls)もできません。
が、opendir(c言語)を用いいると実行権限がなくても内容の確認ができてしまいます。
なんだか不思議な感じがしませんか?

No. 4370 # 68user 2005/11/09 (水) 02:02:19
>>4369 マーブル
> 実行権限がないディレクトリに対して移動(cd)もディレクトリの内容の確認も(ls)もできません。
> が、opendir(c言語)を用いいると実行権限がなくても内容の確認ができてしまいます。
少々誤解があるようですが、実行権限がないディレクトリに対しては、移動 (cd) は
できませんが、ディレクトリの内容の確認 (ls) はできます (読み込み権限があれば)。
しかし ls -l はこけます。

引数なしの ls が行っていることは opendir(2) なわけですが、opendir(2) は
ディレクトリの下にアクセスしません。ディレクトリエントリを読むだけなので
    % cat ディレクトリ名
相当の処理しかしていません。よって、ディレクトリに対する読み込み権限があれば
ファイル一覧を取得できます (ディレクトリも広義のファイル)。

一方 ls -l は opendir(2) して、取得したファイル名それぞれについて stat(2) する
わけですが、stat(2) するには それぞれのファイルの i-node を知る必要があります。
しかし i-node を知るには、そのファイルが属する上位ディレクトリの実行権限が必要です。

結局のところ、ディレクトリに対する実行権限とは
      「ファイル名から i-node への変換を許可するかどうか」
であり、言い換えると
      「namei(9) を許可するかどうか」
だとわたしは思っていますが、違っていたら誰か教えてください。

No. 4371 # マーブル 2005/11/09 (水) 08:21:56
>>4370 68user
すいません-Fのエイリアス掛かってました。
\lsで動作します、掲示板汚してごめんなさい。

truss ls -F testdirの結果の一部
fchdir(0x5) ERR#13 'Permission denied'
よりディレクトリ内に移動できないということらしいです(FreeBSD)
(Linuxで試したらfstatでのエラーだったのでものによりけりな予感

No. 4372 # 68user 2005/11/09 (水) 11:15:37
~はunixではどのような存在なのですか?

No. 4373 # マーブル 2005/11/09 (水) 13:24:33
>>4368 68user
>>4366 anonymous
は解決したのですか?

No. 4374 # DNS勉強中 2005/11/10 (木) 14:36:15
はじめまして。
学校の課題で、C言語でnslookupみたいな動作をするプログラムを作るように言われ
こちらのサイトを参考に作成させていただいております。

それで一箇所気になったのですが、

http://x68000.q-e-d.net/~68user/net/resolver-3.html
> タイプが TXT なら、そのまま表示します。
> これは多分間違い。
> % ./resolver-1.pl www.jp.freebsd.org version.bind txt chaos
> リソースデータは「&Sorry, no version string is available」と表示されるが、
> dig や nslookup は「Sorry, no version string is available」となります
> (& がない)。
> 先頭の & を削るような規則があるようだが、それが何なのかはわからなかった。

の部分ですが、&の文字コードは0x26(10進数で言う38)。
そしてその後に続く
【Sorry, no version string is available.】
は38文字。
つまりドメイン名の3www8livedoor3com0と同じような意味かなと思います。
そのため先頭の1バイト目を出力しないようにすればdigやnslookupと同じような
表記になるのではと思います。

例) sega.jpを調べるとunknownが帰ってきますが、その中身は
【07 75 6e 6b 6e 6f 77 6e】です。

文字数が32文字以上ないと画面上には何も表示されないので、
それ以下の文字数のところでは結果的にうまく出力されているのかなと思います。
そのため【タイプが TXT なら、そのまま表示します。】ではなく、
【タイプが TXT なら、先頭1バイト以外をそのまま表示します。】かなと思います。
ぜんぜん的外れな事言っていたらすいません。

Prev< No. 4294〜4374> Next  [最新発言に戻る] [過去ログ一覧]