• ベストアンサー

UNIXのcshについて。

ちょっとここに質問していいものか迷いましたが、 このカテゴリで質問させていただきます。 UNIXのCシェルで、あるシェル変数に1行分のデータが 読み込まれていて、これをいくつかのデータがタブ 区切りで入っています。 これを違う複数の変数に各データを切り分けて入れた いのですが、どうしたらいいかわかりません。 awkやsedという手を考えたのですが、あれはファイルから 読み込むので、できませんでした。 わかる方がいらっしゃればよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

例えば変数wholevalueに set wholevalue = 'Monroe female actress' という具合に入っていたとします。 この時、 set eachvalue = `echo $wholevalue` とすると、(シングルクォートとバッククォートの違いに注意) eachvalueは変数の配列になります。 set name = $eachvalue[1] set sex = $eachvalue[2] set occupation = $eachvalue[3] とすると、$name, $sex, $occupation に、Monroe, female, actress が それぞれ入ります。

ro-su
質問者

お礼

なるほど、配列みたいな定義が、cshにはできるんですね・・・ やってみます、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

foreach を使って配列に入れることもできます。 ご参考までにどうぞ #!/bin/csh set xxx="a b c" set yyy # xxx をひとつずつ取り出して、yyy に追加する foreach zzz ($xxx) set yyy=($yyy $zzz) end # 出力してみてチェック # 配列は 1 番目から入っています @ i = 1 while($i <= $#yyy) echo $j $yyy[$i] @ i = i + 1 end

ro-su
質問者

お礼

アドバイスありがとうございます。 自分が実際にやりたい処理とかはファイルが絡んでくるんで、ちょっと前記の例は難しいですが、こういうのもあるんですね。ありがごうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • syunpon
  • ベストアンサー率42% (9/21)
回答No.1

変数valueにデータがあるとして value2=`echo $value | awk '{print $1}'` とかで出来ると思いますよ echoは標準出力に出力しますのでパイプを使って標準入力からawkにデータを 渡し、加工した結果を別の変数へ代入。 他にも色々やり方があると思いますけど取りあえずこんな感じでどうでしょう?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ある単語を含む行と、1つ前の行とを削除するシェル

    UNIX初心者です。 シェル(Korn)で、あるファイル中に、単語 "iwa"を含んだら、その行と、1つ前の行とを削除したいシェルを作りたいのです。  つまり、grep, sed, awk などで、"iwa"を含む行がみつかったら、その行(iwaを含む行)と、なおかつ、1行前の合わせて、2行を削除するシェルを作りたいのですが、行番号(NR?)などを使うのでしょうか? よろしく、お願いします。

  • sed,awkでのデータ抽出方法

    教えてください。 awk,sed,シェルを使い、カンマ区切りのファイルの1カラム目と2カラム目をキーに、 あるファイルに含まれる行を削除するにはどうすればよいのでしょうか? 例) --aaa.csv-- 111,222,333,444 555,666,777,888 999,000,111,222 --file1.txt-- 111222 555666 の場合、aaa.csvより下記行のみほしい。 999,000,111,222 ご存知でしたら、ご教授ください。 よろしくお願いします。

  • UNIXのシェル、環境設定について教えてください。

    こんにちは。 UNIXについて詳しく勉強したいとおもっています。 コマンドなど基本的なファイル操作についてはある程度わかるのですが、UNIXの環境設定、環境変数、シェルなどの物につまづいています。 「環境変数って一体なんだよ!」 「シェルのBシェル、Cシェルって・・・」 こんな感じです。 これらについて初心者でもわかるような本、サイトを教えてください。 あと、初心者すぎて恥ずかしい質問なのですが、UNIX系OSにはいろいろな種類があるのは知っているのですが、「UNIX」という名前のOSはあるのでしょうか? また、Teratermを使っているのですが、これって何ていう名前のOSなのでしょうか? 最後に、会社なのでは、SolarisとLinuxどちらが多く使われているのでしょうか? これらの質問に詳しい諸先輩方アドバイスの方をよろしくお願いします。

  • UNIXで、とあるテキストに対して2文字区切りで改行をいれるには?

    UNIXのシェルスクリプトで、このような動作ができないものかどうか考えています。 あるテキストファイルの内容を、2文字ごとに区切って改行を入れるように加工する 例えば file1.txt が以下のような内容であれば --file1.txt-- 000092 027301 01 0263000001 2文字ずつ区切って改行を挿入したファイル --file2.txt-- 00 00 92 02 73 01 01 02 63 00 00 01 を生成したいと思います。 ここで元のファイルは必ず、半角の数字のみで構成されており、 1行の文字数は最低2文字以上あり、なおかつ奇数個の文字列は存在しないものとします。 awk や grep や sed を組みあわせて考えているのですが、 なかなか解決に至りません。 どなたかお知恵を拝借願います。

  • awkで特定の範囲の行を削除したい

    awkなどの使い方がよくわからないので教えてください。 あるテキストファイル中の、"del_start" という文字が入った行から"del_end" という文字が入った行までの全ての行を削除したファイルを作るシェルを作成したいと思っています。 awk(やsed、grep、cat ?)などを使って実現するにはどうすればいいのでしょうか? よろしくお願いします。

  • UNIXでのプログラムその2

    UNIXでのシェル/AWK/SEDなどで以下のような 処理をおこないたいのですがいい方法を教えて下さい。 以下のような変換をやりたい。 MED1 = ( AMED1 NOT WIN ) interact (( BME1_1 OR ACON ) OR TH1 )   ↓ MED1_1 = AMED1 NOT WIN MED1_2 = BME1_1 or ACON MED1 = MED1_1 interact MED1_2 OR TH1

  • UNIXのシェルスクリプト

    UNIXのシェルスクリプトで以下のようなことをやりたいのですがいい方法を教えて下さい。 ファイルの中にある文字列があります。 たとえば”CURREND_DIR” この文字列をシェルスクリプトでカレントのディレクトリパスに変換したいのですが いい方法が思いつきません。 set dir_data = ‘pwd‘ sed -e ’s/CURRENT_DIR/$dir_data’ ファイル名 でできるかなと思ったのですが、”CURRENT_DIR”が”$dir_data”に置換されてしまいます。 さらにdirパスが”/”で区切られていることも問題のようです。

  • awk in csh

    cshスクリプトの中で、awkと連動させたプログラムを書こうとしています。 以下の様なテーブルファイル(hoge.txt)があると想定してください。 1 0.01 0.52 3.23 ..... 2 0.22 9.34 8.22 ..... 3 0.44 0.68 3.81 ..... ... (列も行も揃っている数値だけのテーブル) 例えば、変数hogeに第2行、第2列の数値(文字列)0.22を代入する際、 シェルスクリプト内部で、 @ hoge = `awk 'NR==2' {print $2} hoge.txt` としましたが、$2をスクリプトに与えられた2番目の引数だと解釈して、 うまく動作しません。 試しに$2 -> \$2に変換してみましたが、ダメでした。 (\の後に改行がないというエラーが出ました) 第i列目,j行目の文字列を取り出すにはどのようにすれば良いでしょうか。

  • csh foreachで「*」でエラーとなる

    シェルの初心者です。よろしくお願い致します。 cシェル(csh)で、リストをforeachで1行ずつ取得しているのですが、「*(アスタリスク)」の値があると「一致しません」とエラーで落ちてしまいます。 「*(アスタリスク)」も正常に読んで、ループを回すことはできないのでしょうか? foreach FILE ( \"`/bin/cat リストファイル名`\" ) リストは「|(パイプ)」区切りにしてあります。 foreachで一行ずつ、読んでループしています。 ご存知の方は、お力をお貸し下さい。 よろしくお願い致します。

  • UNIXでシェルスクリプトを作ることを始めましたが、まだ未熟者です。

    UNIXでシェルスクリプトを作ることを始めましたが、まだ未熟者です。 既存のスクリプトが複数あるのですが、 全てに対して同じ処理を入れ込む必要があります。 入れ込む内容はレイアウトを変更するだけ(awkで書く予定)なので簡単なのですが、 既存スクリプトに全て書き込むのは大変です。 また入れ込んだ処理内容に変更があったときに、全てのスクリプトに変更をひとつひとつ反映させるのは大変です。 入れ込む処理を別ファイルで作成しておいて、 既存スクリプトからはこのファイルを参照するだけにしたいのですが、 どのように書いたらいいのでしょうか?教えてください。

このQ&Aのポイント
  • windows8.1のパソコンを使用していますが、セキュリティーの問題が心配です。
  • ネット上でwindows10にアップデートすることを勧められますが、アップグレードのリスクやパソコンのスペック不足も考慮し、慎重に検討しています。
  • また、windows8.1のサポートがいつまで続くのか、終了するとセキュリティーが危険になるのか不安です。
回答を見る