68user's page 掲示板

Prev< No. 2780〜2808> Next  [最新発言に戻る] [過去ログ一覧]
No. 2780 # aozora 2002/06/20 (木) 00:23:56
はじめまして。

あまりにも簡単な質問のようで申し訳ないのですが、
「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」でしょうか?
どこで読んだのか、「ポート番号とプロセスIDを組み合わせたもの」という考えが頭を離れず、
自分でもいろいろ調べたのですが、解答は見つかりませんでした。
もしかしたら見当違いな質問なのかもしれませが、
ソケットの知識をお持ちの方がおりましたら、ご教授願います。

どうぞよろしくお願い致します。

No. 2781 # 68user 2002/06/20 (木) 05:30:37
>>2779 has
ども。最近会社でもやる気ゼロなので、回答なぞしてるんですわ。

もしかして Netscape を起動した後に dhcp クライアントを起動
してません? もしそうなら順番を逆にしてみるとか。

そうでないなら、tcpdump の結果を見せてくださいな。

あと、あらゆる gethostbyname が失敗してますか?
    % perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))"
もダメですか?

>>2780 aozora
> 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」
> でしょうか?
「IP アドレスとポート番号を組み合わせたもの」は相手を一意に特定するための
識別子で、たとえるなら電話番号です。
# ただし、それは IP の話。UNIX ドメインソケットでは、ファイルが識別子です。

「ソケット」は、通信路の端点で、たとえるなら電話機です。

これを同じものと考えてしまうと、例えば bind(2) が理解できなく
なります。bind(2) はたとえるなら電話機に電話線をつなぐという
感じでしょうか。

> 「ポート番号とプロセスIDを組み合わせたもの」
違います。1プロセスから複数のソケットを使うことができますから。

No. 2782 # shido 2002/06/20 (木) 11:32:14
初めて書き込みをします。
UNIXは、まだ初心者です。

お聞きしたい事を書き込みます。
現在、「share」コマンドでディレクトリを共有した後、「dfmount」コマンドで共有されたディレクトリにアクセス中のクライアント名を取り出そうとしています。
「dfmount」コマンドで情報が取れないのですが、どうしてなのでしょうか?
「share」の情報を書き込みます。
> /usr/sbin/share
- /share rw=client "File Service"
- /home rw=nini:gp7000s,root=gp7000s "File Service"
- /shared rw=osl:gp7000s,root=gp7000s "File Service"
>

No. 2783 # シド 2002/06/20 (木) 11:41:06
はじめて書き込みます。
UNIXの初心者シドです。
少し教えてほしいことが有ります。
知っていられる方は、お教え願えないでしょうか?
「share」コマンドを実行して、「dfmounts」コマンドを実行すると何も表示されません。なぜでしょうか?
「share」の情報と「dfmounts」コマンドを実行したときの表示部分を書きます。
> /usr/sbin/share
- /share rw=client "File Service"
- /home rw=nini:gp7000s,root=gp7000s "File Service"
- /shared rw=osl:gp7000s,root=gp7000s "File Service"
> /usr/sbin/dfmounts
>

No. 2784 # シゲ 2002/06/20 (木) 12:21:48
UNIX初心者(パソコンも初心者です)の私にどうか教えてください。

telnetを使って、redhat環境のマシンに接続して操作をしています。
$shutdown -r now
で再起動をしました。
すると、立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、立ち上がって普通は
[ユーザ名(マシン名)カレントディレクトリ]$
と出るところで、マシン名がnone(本来はmizuho)になっていました。そして、書き込み可能(-wrxwrxwrx)のファイルを操作しようとすると、読取専用とエラーメッセージが出て操作できなくなってしまいました。(全ファイルそうです)
  
いろいろやってみた結果、
$mount -o remount, rw /dev/hda5 /
で、書き込み可能にはなりましたが、再起動をすると読み込み専用に戻ってしまいます。
(boot.log,messageを見てみましたが、snmpd shutdown failedと出ています。これって関係ありますか?)
  
どなたか直し方を教えてください。
お願いします。

それと今、boot画面のメッセージをチェックしようとしているのですが、1行ずつ進める方法があるらしいです。これってどうやるのですか?

No. 2785 # うみ [E-mail] 2002/06/20 (木) 18:18:16
はじめまして。
現在どうしても解決できない問題があり、書き込みました。
どなたかご存知の方いらっしゃいましたら、レスよろしくお願いします。

WEBサーバにおいてLocationヘッダで指定したURLへリダイレクトさせて、
かつリダイレクト先へのHTTPリクエストにCookieを設定したいのですが、
設定できない状態になっています。

---------------------------------------------------------
HTTP/1.1 302 Found\n
Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n
Location: http://www.hogehoge.co.jp\n\n
---------------------------------------------------------

のようなレスポンスを返却するCGIを作成したのですが、上記レス
ポンスを返すサーバとリダイレクト先のサーバが異なる場合、次の
リクエストにCookieが付加されてきません。
Cookieを設定できるのは、自分と同じドメインのみなのでしょうか。

当たり前の事だったら申し訳ありません。
よろしくお願いします。

No. 2786 # 68user 2002/06/20 (木) 19:28:47
>>2785 うみ
> Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n
cookie で domain をセットしたことがないのでよく知りませんが、
無理なんじゃないでしょうか。これができるなら、任意のサーバの
cookie を外部からセットできることになります。

http://www2.studyinghttp.net/cookies.html を見ると、
    server-1.hogehoge.co.jp で
        Set-Cookie: test=a domain=hogehoge.co.jp
    という cookie を吐くと server-1.hogehoge.co.jp や
    server-2.hogehoge.co.jp に送り返されるようになる。
ということではないかと思います。

もし、「Location なしだとうまくいくが、Location ありだとダメ」
ということなら、上記の認識は間違っているんでしょうけど。

>>2784 シゲ
> 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、
このときコンソールには何が出力されていますか? 症状からすると
何かしらのエラーが発生して、Read-only で mount され、シングル
ユーザモードで起動しているように見えますが、根本原因がコンソール
に表示されていると思います。

>>2783 シド
>>2775 レイラ
僕には全くわからない分野なので、お役に立てないようです。

No. 2787 # 68user 2002/06/20 (木) 19:32:56
>>2786 68user
>> 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、
> 何かしらのエラーが発生して、Read-only で mount され、シングル
> ユーザモードで起動しているように見えますが
あ、10分待てば起動するのなら違うのかなぁ。

> snmpd shutdown failedと出ています。これって関係ありますか?
shutdown 時のエラーなので関係ないと思います (実は関係あったり
するのかもしれませんけど)。

> 1行ずつ進める方法があるらしいです。
少なくとも FreeBSD では、Scroll Lock を押せばスクロールが止まり、
カーソルキーで移動できます。Linux ではどうなのかはわかりません。

No. 2788 # aozora 2002/06/20 (木) 21:18:13
>>2781 68user
ソケットについてのご教授、ありがとうございました。
かなり間違って理解していたようですが、
お陰様でソケットの考え方について理解できるようになりました。

No. 2789 # シゲ 2002/06/20 (木) 21:21:47
>>2786 68user
お返事ありがとうございます。
早速、scroll lockで画面と止めながら(出来ました!)エラーを見てみました。
Updating /etc/fstab failed to open /proc/partitions:No such file or directory

Flushing all current rules and user defined chains:ipachains:incompatible with this kernel

Clearing all current rules and user and user defined chains:ipchains:Incompatible with this kernel

Starting system logger

Errot:MM:mm:core:failed to open semaphore file(read-only file system):OS:No such file or directory

mount:special device LABEL=/boot does not exisist

Starting crond:crond:can't open or create /var/run/crond/pid:Read-only file system

と7箇所でエラーが出てました。
これを見て私がわかったのは、
/proc/partitionsがない
/bootの何かがない
と言うことです。
見てみると、/proc,/boot両ディレクトリの中がまったく存在しませんでした。
何じゃコリャ!
UNIX初心者(パソコンも)にはまったく解りません。

どうか、ご教授ください。

No. 2790 # has 2002/06/21 (金) 02:14:05
こんばんは。
お仕事大変ですな。まあそう腐らずに頑張ってください >68user

さてガキの使いですんません。宿題やってきました。

まずdhcpcdですが、psで確認しても起動時から動いているようなので、
Netscapeの方が先ということはなさそうです。
次にperlスクリプトですが、残念ながら、
Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at -e line 1.
と表示されます。要は正引きが失敗しているようです。
逆引きは引数の渡し方がわかりませんでした。
# なんせlinuxからはweb検索にも支障をきたしているもので(^^;)

最後にtcpdumpの出力です。tcpdumpを動かしてから、
% host www.jp.freebsd.org
のコマンドと、netscapeにてhttp://www.jp.freebsd.org
http://210.157.158.42/へのアクセスなどをしてみました。
# が、記録に残っているかは私にはわかりませんでした

# /usr/sbin/tcpdump
tcpdump: listening on eth0
01:47:38.943528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1226176673 win 8576 (DF)
01:47:38.943528 192.168.0.40.32797 > 192.168.0.1.domain: 29608+ PTR? 198.129.90.143.in-addr.arpa. (45) (DF)
01:47:38.963528 192.168.0.39.3276 > 143.90.129.198.http: S 22004303:22004303(0) win 8192 <mss 1460,nop,nop,sackOK> (DF)
01:47:38.983528 43.242.210.37.6699 > 192.168.0.33.1190: . 3236267430:3236268764(1334) ack 2911899325 win 17252 (DF)
01:47:38.983528 192.168.0.33.1190 > 43.242.210.37.6699: . ack 4294960438 win 17520 <nop,nop,sack sack 1 {4294961772:1334} > (DF)
01:47:38.993528 211.129.12.43.domain > 192.168.0.40.32797: 29608 1/2/2 (141)
01:47:38.993528 192.168.0.40 > 211.129.12.43: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0]
01:47:38.993528 211.129.14.134.domain > 192.168.0.40.32797: 29608 1/2/2 (141)
01:47:38.993528 192.168.0.40 > 211.129.14.134: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0]
01:47:39.003528 143.90.129.198.http > 192.168.0.39.3044: . 5897:6433(536) ack 0 win 32767
01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF)
01:47:39.013528 143.90.129.198.http > 192.168.0.39.3044: . 6433:6969(536) ack 0 win 32767
01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF)
01:47:39.023528 43.242.210.37.6699 > 192.168.0.33.1191: . 3298096123:3298097457(1334) ack 2981221337 win 17235 (DF)
01:47:39.023528 143.90.129.198.http > 192.168.0.39.3276: S 1909102369:1909102369(0) ack 22004304 win 536 <mss 536>
01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: . ack 1 win 8576 (DF)
01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: P 1:43(42) ack 1 win 8576 (DF)

No. 2791 # シド 2002/06/21 (金) 10:57:06
困っています。誰か助けてください。
UNIXのファイルシステムと他のファイルシステムの切り分けをどのコマンドを使用すればいいのかわかりません。(他のファイルシステムは、SafeFile/Globalファイルシステムです。)はじめは、fstypコマンドを使用すれば、良いと思ったんですが、UFS(UNIXファイルシステム)しか、出てきません。それにデバイス中です。と言うエラーが発生して、困っています。解決策を知っている方は、お教え願えないでしょうか?

No. 2792 # だいすけ 2002/06/21 (金) 11:45:26
echoサーバ(Perl)の5行目の
5: use Socket;
この文はどういう意味なのでしょうか?
おしえてください。

No. 2793 # だいすけ 2002/06/21 (金) 11:56:41
echoサーバのほうはプログラムに解説してくださっているので、読んでみてなんとか理解できそうなのですが、クライアントのほうを書けそうにありません。クライアントのほうもおしえていただけないでしょうか?

No. 2794 # シゲ 2002/06/21 (金) 12:07:10
>>2786 68user
お騒がせしました。出来ちゃいました。
boot画面を見ていると
can't execute rc.sysinit
となっていたので、rc.sysinitを見てみるとアクセス権が
-rw-r-xr-x
となっていました。これでは実行権がないので
-rwx-r-xr-x
とするとできました。
出来てしまえば簡単なことでした。

ありがとうございました。

No. 2795 # [E-mail] 2002/06/21 (金) 21:09:28
初めまして。大学の授業で初UNIXに相当困り果ててるものです・・・。どうか教えてください。
/usr/dict/words とうゆうファイルは単語の先頭の文字をアルファベット順に並べたものですよね??これを単語のおしまいで分類したものだすようにしたいのです。1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!!
よろしくお願いします(><)

No. 2796 # 68user 2002/06/21 (金) 23:55:31
>>2790 has
> 最後にtcpdumpの出力です。
Query 投げてないですねぇ。普通は
    23:36:51.920878 192.168.0.5.2275 > 192.168.0.1.domain: 4+ A? www.jp.FreeBSD.org. (36)
    23:36:52.003329 192.168.0.1.domain > 192.168.0.5.2275: 4 1/4/5 A updraft.jp.FreeBSD.ORG (251)
こんな感じのが流れるはずです。念のため、
    % strace dig www.jp.FreeBSD.org
で流れを追ってみてください。うちの FreeBSD では (*BSD は truss)
    % truss dig www.jp.FreeBSD.org|egrep 'socket|connect'
    socket(0x2,0x2,0x0) = 3 (0x3)
    connect(0x3,{ sa_len = 48, sa_family = 120, sa_data = } },16) = 0 (0x0)
となりますが、そちらではどういう結果になりますか?

もし socket さえ行っていないようなら、/etc/host.conf とか
/etc/resolv.conf の解析あたりでこけているような気がします。

なお、nslookup や host は /etc/hosts や /etc/host.conf を
参照せず、必ず DNS サーバに Query を投げるので、原因の
切り分けの際はご注意を。

> resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定
> [nameserver 192.168.0.1]を記述しています。
DHCP クライアントは /etc/resolv.conf を上書きすると思いますが、
上書き後の内容はどうなっていますか?

あとは、DHCP をやめて、手で IP アドレスなどを設定してみると何かに
気づくかも…という役に立たないアドバイスしかないです。


>>2793 だいすけ
> 5: use Socket;
> この文はどういう意味なのでしょうか?
Socket モジュールを使うという宣言です。利点は
    http://x68000.startshop.co.jp/~68user/net/perl4.html
をどうぞ。

>>2793 だいすけ
> クライアントのほうを書けそうにありません。
何がわからないのかわからないので、
    http://x68000.startshop.co.jp/~68user/net/
を読んでくださいとしか言えません。

>>2795
> これを単語のおしまいで分類したものだすようにしたいのです。
> 1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!!
じゃあヒントだけ。rev というコマンドがあるならそれを
使います。rev がない UNIX なら、わかりません (perl を
使えばできるけど、問題の趣旨とは違うような気がする)。

No. 2797 # HIDE 2002/06/22 (土) 18:05:25
あるログファイルに1行出力されるごとに、その行に特定のキーワードが
あるかどうかを判断して、あった場合はその行を別のログに出力する
といったことをUNIXコマンドでできないかと調べています。
イメージとしては、「tail -f」と「grep」の組み合わせみたいな
感じですが、二つのコマンドをパイプで結合してもダメでした。
何か良い手はないでしょうか? ご存知の方がいたら教えてください。
よろしくお願いします。

No. 2798 # 68user 2002/06/22 (土) 19:26:19
>>2797 HIDE
tail -f log | grep foo でできる環境もあります。FreeBSD と Solaris2.6/8
あたりはできるはず。

というか、できない環境をしらないのでアドバイスはできませんが、tail が
バッファリングしてるのかな?

tail 自体それほど複雑な機能ではないので、さくっと perl などで
自作するのがいいかもしれません。

No. 2799 # HIDE 2002/06/22 (土) 20:19:02
>>2798 68user
ご回答いただきまして、ありがとうございます。

>tail -f log | grep foo でできる環境もあります。FreeBSD と>Solaris2.6/8あたりはできるはず。
  こちらの環境はSolaris2.6です。
         tail -f log | grep foo
  だと意図した形で画面に表示されるのですが、
         tail -f log | grep foo >> log2
  とやるとlog2には何も出力されないんです・・・・・・
  何か環境が変なのかな?

>tail 自体それほど複雑な機能ではないので、さくっと perl などで
>自作するのがいいかもしれません。
  そうですね。実はこの処理は大容量の性能関連のログから必要な
  行を抽出/判定するための使用しようとしているのですが、Perl
  で作ったらログの行が多いからか、逆にそのツールが動いている
  時間はCPUが100%になってしまったのでUNIXコマンドでできないかと
  調べている次第です。(Perlはあまり詳しくないので私の作り方が
  マズイだけかもしれませんが)

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

No. 2800 # 68user 2002/06/22 (土) 21:36:23
>>2799 HIDE
> tail -f log | grep foo >> log2
なるほど。grep が出力をバッファリングしてるからですね。ちょっと調べて
みた限りでは、/dev/stderr にリダイレクトしてもダメだし、バッファリング
ありにするオプションはないようなので、
    % tail -f log | perl -ne '$|=1;print if m/foo/' >> log2
てな感じで。

でも、grep でなんとかなりそうな気もするなぁ…。

No. 2801 # 68user 2002/06/22 (土) 22:38:23
>>2800 68user
> /dev/stderr にリダイレクトしてもダメだし
あー、grep 自体は stdout に出力してるだけだから、シェルで
いくら stderr に振ってもどうにもならないですね。

というわけで、続きはここで。
    http://pc.2ch.net/test/read.cgi/unix/1022769156/l50
2ch で質問するのなら最初からそっちで聞けっつーの。

No. 2802 # HIDE 2002/06/22 (土) 22:47:54
>>2800 68user

% tail -f log | perl -ne '$|=1;print if m/foo/' >> log2
をやってみたら、うまくいきました!
いろいろ調べていただいたようで、ありがとうございました。m(__)m

>でも、grep でなんとかなりそうな気もするなぁ…。
微妙〜なとこでうまくいかないのが悔しいですね。(^^;)
でも、この件は急いでいたので大変助かりました。

No. 2803 # HIDE 2002/06/22 (土) 22:52:03
>>2801 68user

>2ch で質問するのなら最初からそっちで聞けっつーの。
至急性が高かったので両方に投稿しておりました。
大変失礼しました。すいません。

No. 2804 # 通りがかり 2002/06/23 (日) 09:16:15
ここまでまるごとパクリっていうのも...

http://www.apk.ne.jp/~yasya/ura/unix/index.html

No. 2805 # has 2002/06/23 (日) 12:10:54
>>2796 68user
digをstrace|egrepした内容です。

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol)

一応ソケットを作りに行ってますが、connectはしてないみたいです。
あと設定ファイルですが、起動のたびに上書きされており、
% cat /etc/resolv.conf
nameserver 192.168.0.1
となっています。

固定IPを設定するのは気がひけるのでまだやってません(^^;)
でも毎回同じIPが割り当てられてる気もするし、MACアドレスとかで
決めてるようならいつものIPを指定してみようかな?

ついでに
>>2781のperlスクリプトをstrace|egrepしてみました。

socket(PF_UNIX, SOCK_STREAM, 0) = 3
connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or directory)
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
お手数かけてますがどうぞよろしく。

No. 2806 # 68user 2002/06/23 (日) 17:06:51
>>2805 has
> digをstrace|egrepした内容です。
> socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
> socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
> socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
> socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol)

> perlスクリプトをstrace|egrepしてみました。
> socket(PF_UNIX, SOCK_STREAM, 0) = 3
> connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or > directory)
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
> connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
> connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0

なんか全然違いますねぇ。UDP/IP で、192.168.0.1:53 宛に connect
するはずなので、perl の場合の
    socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
    connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
という結果は正しいと思います。perl の実行時に tcpdump してみたら
どうなるんでしょうか。

うちではこんな感じです。
    % truss perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))"
    socket(0x2,0x2,0x0) = 4 (0x4)
    connect(0x4,{ AF_INET 192.168.0.1:53 },16) = 0 (0x0)
    sendto(0x4,0xbfbfe464,0x24,0x0,0x0,0x0) = 36 (0x24)
    recvfrom(0x4,0xbfbfed64,0x400,0x0,0xbfbfe238,0xbfbfe1fc) = 251 (0xfb)
    close(4) = 0 (0x0)
    close(3) = 0 (0x0)

    % truss dig www.jp.freebsd.org
    socket(0x2,0x2,0x0) = 3 (0x3)
    connect(0x3,{ sa_len = 48, sa_family = 120, sa_data = } },16) = 0 (0x0)
    sendto(0x3,0xbfbff184,0x24,0x0,0x0,0x0) = 36 (0x24)
    select(0x4,0xbfbed694,0x0,0x0,0xbfbed60c) = 1 (0x1)
    recvfrom(0x3,0xbfbef184,0x10000,0x0,0xbfbed684,0xbfbed678) = 251 (0xfb)
    close(3) = 0 (0x0)

ただ、どうも strace から絞り込んでいく方向は遠回りかもしれません。
IPv6 を OFF にしてみるとか、DHCP を使わずにやってみる方が早道かも
しれませんね。

> でも毎回同じIPが割り当てられてる気もするし、MACアドレスとかで
> 決めてるようならいつものIPを指定してみようかな?
大抵の DHCP サーバは、どの MAC アドレスにどの IP アドレスを振った
かを数日間記憶していて (設定次第ですが)、できるだけ同じマシンには
IP アドレスを振るようにしているので、ちょろっと試す分には OKかと
思います。


>>2804 通りがかり
> ここまでまるごとパクリっていうのも...
> http://www.apk.ne.jp/~yasya/ura/unix/index.html
クレーム入れるのもダルいので、放置です。

ちなみに他にもありますよ :-)
    http://www.it.ice.uec.ac.jp/~furu/unix/kind.html
    http://noto.cc4-4.kanagawa-u.ac.jp/~jsato/helps/

コンテンツの引用や転載については
    http://x68000.startshop.co.jp/~68user/
を読んでください、ということで。

No. 2807 # 愛子 2002/06/24 (月) 11:22:04
こんにちは。愛子@UNIX1年生 です。
今回、Cシェルを作成することになり、Cシェルはじめて2週間といった
初心者です。どうぞ、宜しくお願いします。

さて、質問なのですが・・・

[ test.txt ]

apple 133 123
orange 133 123
candy 133 156
というファイルがあります。

このファイルの各行末に
変数 TEMPSTR に 格納されている文字列を連結するというCシェルを
作成しようとしています。

[ 作成したシェルスクリプト ]
#!/bin/csh

set TEMPSTR = "LIST"

sed 's/$/,123.45/' < test.txt
sed "s/^/${TEMPSTR},/" < test.txt
sed "s/$/,${TEMPSTR}/" < test.txt

[ 実行結果 ]

apple 133 123,123.45
orange 133 123,123.45
candy 133 156 ,123.45
LIST,apple 133 123
LIST,orange 133 123
LIST,candy 133 156
文法があいまいです。

となります。
行頭挿入は、出来るのに行末追加は出来ないのは何故でしょうか???
文法があいまい ということは、変数の指定がいけないと思うのですが
・・・
変数の中身は、固定でないので(各行違うデータを文末につけるので)
変数を用いなればなりません。
sed以外でも ファイルの各行の文末に文字列を連結することが
出来るコマンドがあれば、そちらの方法でも構いません。
(行数分LOOPを回してやるというLOOP処理では行数が1万行とかあるので
  NGですが)

質問の仕方が下手で申し訳ありませんが、宜しくお願い致します。
ちなみにバージョンは、UNIX(r) System V Release 4.0 です。
どなたか、ご教授いただければ大変、嬉しく思います。

No. 2808 # 愛子 2002/06/24 (月) 15:07:43
自己レスでごめんなさい。
10Hやって出来なかったので、質問したのですが、

インターネットで調べながらやっていたら、出来ました。
            sed 's/$/,'$TEMPSTR'/' < test.txt
でした。

また、1行目から2行目まで追加したい時は、
            @ RW = 2
            sed '1,'$RW's/$/'$TEMPSTR'/' < test.txt
のようです。
ご参考までに

#!/bin/csh
set TEMPSTR = "LIST"
@ RW = 2
sed 's/$/,123.45/' test.txt
sed "s/^/${TEMPSTR},/" test.txt
echo RW = $RW
echo TEMPSTR = $TEMPSTR
sed '1,2s/$/,GYOUMATSU/' test.txt
echo "-----------------------------------------------"
sed '1,'$RW's/$/'$TEMPSTR'/' test.txt
echo "-----------------------------------------------"
sed 's/$/,'$TEMPSTR'/' test.txt
どなたかが参考になるといいなぁ・・・
では、お騒がせ致しましたです。

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