ちょっとここに質問していいものか迷いましたが、
このカテゴリで質問させていただきます。

UNIXのCシェルで、あるシェル変数に1行分のデータが
読み込まれていて、これをいくつかのデータがタブ
区切りで入っています。

これを違う複数の変数に各データを切り分けて入れた
いのですが、どうしたらいいかわかりません。
awkやsedという手を考えたのですが、あれはファイルから
読み込むので、できませんでした。

わかる方がいらっしゃればよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

例えば変数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 が
それぞれ入ります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/09/17 15:46

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/09/17 15:48

変数valueにデータがあるとして


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

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qシェルでファイルを読み込む

csh を使っています。

ファイル hoge には1行に一つずつファイルの / からのパスが記されています。

hoge から 1行ずつファイルパスのリスト読み込んでそのファイルについて ls -al を行なった結果をファイル foo に保存したいのですが、どのようなシェルプログラムを作れば宜しいでしょうか?
awk/sed も使える環境ですので、これらを使ったスクリプトでも構いません。

非常に初歩的な質問で申し訳ありませんが、宜しくお願いします。

Aベストアンサー

cat hoge | xargs ls -al > foo

でいいと思います。

QUNIXからダウンロードしたファイルをLineInput#で読み込めない

UNIX(AIX)からダウンロードしたテキストファイルをVBのLineInput#ステートメントで、行単位に
読み込もうとすると、とんでもない行が読み込まれ、予測しない動作をします。
おそらく改行コードの問題だと思うのですが、再度ダウンロードすることができないので、Windows側で改行コードの変換をしたいと思います。
なにかよい方法がありましたらご紹介ください。

Aベストアンサー

VECTOR(www.vector.co.jp)等から,
文字コード変換プログラムをダウンロードして使ってください.
QKC
http://www.vector.co.jp/soft/win95/util/se065175.html?l
がお勧めです.

------------------------------------------------------------

おまけ:QKCの操作方法:

1. 念のため,もとのファイルのコピーを作っておきましょう.
2. qkcをダウンロード・解凍したら,
3. 変換したいファイルをQKCアプリケーション(「(漢)」マークのアイコン)
に落とす.すると,QKCが起動する.
(もとのファイルのコードは自動判定される.)
4. 出力ファイルの漢字コードと改行コードを指定し,
(windowsなら,S と CRLF のボタンを押す)
5. 「変換」ボタンを押す.
これで変換は完了です.

Q環境変数とシェル変数

UNIXのシェルスクリプトで使用するシェル変数と環境変数とはどういった違いがあるのでしょうか?どのように使い分ける必要があるのでしょうか?また、このような使い方をすると間違いがおこりやすいといった具体的な例など教えていただければ助かります。

Aベストアンサー

環境変数はforkした子プロセス(及び子シェル呼び出し)に引き継がれ、呼ばれた子プロセスはそれらを参照する事が出来ますが、シェル変数は子プロセスには引き継がれません。

子プロセスが親からの情報を受け取って何かしたい時に環境変数を使います。

QBシェルのawkコマンドについて

Bシェルのawkコマンドについてですが、例えばプロンプトから
% ls -l hoge.txt | awk '{print $5}'

と入力すると、hoge.txtのファイルサイズが出力されますが、同様のことをBシェルの中で行おうと思っています。

下記のように、配列arrayにはスペース区切りで3つのデータが入っており、N番目のデータを取得したいという場合に、Nに変数を使用して取得する方法がわかりません。

#!/bin/sh

array="AA BB CC"
num=3 # CCを取得したい
echo $array | awk '{print $num}'

上記で実行すると、"AA BB CC"のようにすべて出力されてしまいます。awkで出力する箇所を${数値}で指定すればうまくいくのですが、ランダムで決めた数値(1~3)をnumに入れて取得したい場合、このようなことは可能でしょうか。

もし不可能な場合でも、awk以外に何かコマンドがあればご教授願います。なお、作成するのはBシェルになります。

Aベストアンサー

' ' で囲まれた中では、$によるシェル変数置換は効きません。" " で囲むとシェル変数置換が行われます。ただ、
echo $array | awk "{print $num}"
と書くと、$num が 3 のため、
echo $array | awk "{print 3}"
となり、3が表示されるだけです。

echo $array | awk "{print \$$num}"
echo $array | awk '{print $'$num'}'
のどちらか好みのほうを使ってください。私の好みは後者です。

他には、cut コマンドも使えるかと思います。詳しくは、man cut を。

QUNIXシェルの途中でユーザー切り替え

UNIXシェルの途中でユーザーを切り替える方法はありますか。

例)
 ・ユーザAで先頭100行を実行し、残りはユーザBで実行など・・・。

 ※suできれば良いのですが、対話形式のパスワード入力を促されてしまいますよね・・・。

Aベストアンサー

#3です。
>これを一つのシェルにして、都度ログインしている部分、及び、コマンド実行部分を自動化したい・・・、と言うのが趣旨です。
>それで、まとめたシェルについては、rootで実行ではなくて、一般ユーザで行ないたい・・・。
>という流れとなります。ニュアンスは伝わりましたでしょうか。

伝わってますよ。その前提での回答です。回答を良くお読みください。cmdaとcmdbを並べた親コマンドを作ってそれを一般ユーザーで実行します。
ただし、都度ログインということはログイン時の環境変数設定とかも影響するかもしれないので、必要に応じて、cmda, cmdb の先頭で、source ~usera/.profile などを実行する必要があります。


このカテゴリの人気Q&Aランキング

おすすめ情報