No.2ベストアンサー
- 回答日時:
こんにちは、ヤマトさん。
csh の配列というのは、例えば DATA が「foo;bar;baz」であったとき、
DATA_ARR には「foo bar baz」という値を入れたいということでいいでしょうか。
split を使えばこのようになりますか。最後には Control-D を押す必要があります。
この例では split の結果は配列 A の中に格納されます。
「DATA=$DATA」はシェル変数 DATA の値を
AWK で用いる変数 DATA に代入するという意味です。
set DATA_ARR=`awk 'END{split(DATA,A,";");print A[1],A[2],A[3]}' DATA=$DATA`
split を使わない別解として、標準入力を用い
set DATA_ARR=`echo $DATA | awk 'BEGIN{FS=";"}{print $1, $2, $3}'`
とも書けます。こちらは C-d は不要です。
BEGIN 節の中の「FS」とはフィールド区切り文字(field separator)の意味で、
AWK は $0 をこの値によって自動的に split してくれます。
なお、FS については BEGIN 節の中で記述せず、
「-F\;」のようにAWK へのオプションとしても指定できます。
(「;」をエスケープしていることにご注意)
「OFS」という出力フィールド区切り文字(output FS)もあり、
print などの出力はこれを挟んで表示されます。
初期値はスペースで、上記の例でもこの初期値を利用しています。
結果は「echo $DATA_ARR[1]」などとしてご確認ください。
独習されているようですので、いい参考書が必要でしょう。
「LINUX クイックリファレンス(第2版)」(オライリー・ジャパン)がお勧めです。
この1冊の中に各種シェルや awk, perl、GNU コマンドなどが要領よく解説されています。
お値段は高めですが、それだけの値打ちはあると信じます。
http://www.oreilly.co.jp/BOOK/linuxnut2/
AWK の参考書としては同じくオライリー・ジャパンの「sed&awk プログラミング 改訂版」
(Dougherty, Robbins 共著、福崎 俊博訳)か、
「プログラミング言語 AWK」(エイホ・カーニハン・ワインバーガー共著、
足立高徳訳/シイエム・シイ)がいいでしょう。
ちなみに「AWK」の名前の由来はこの三人 Aho, Weinberger, Kernighan の
頭文字を取ったものです。
http://www.oreilly.co.jp/BOOK/sedawk/
http://www.amazon.co.jp/exec/obidos/ASIN/4901280 …
スクリプト言語として AWK もいいのですが、基本的にフィルタ言語ですから
制御構造が標準入力を読み込むためのループに縛られる傾向があります。
今から学ぶとしたら、Ruby や Perl または Python の方がよりやり甲斐があると思います。
特に私の好きな Ruby ではこのように書けます。
ruby -e "print '$DATA'.split(/;/).join(' ')"
(ba)sh においては以下のようにしてください。
ruby -e "print \"$DATA\".split(/;/).join(' ')"
join は split の逆で、配列要素を区切り文字で挟んだ文字列を返します。
split の括弧の中身がシンプルなのがおわかりでしょうか。
左から右へすんなりと処理が進んでいくのは、
Ruby の「オブジェクト指向」の御利益なのです。
http://www.ruby-lang.org/ja/
http://www15.web24.jp/~c01763n1/rubytips/
最後にちょっとお節介。
csh を使ってみて、やっぱり込み入った引用符の処理が
(ba)sh に比べて洗練されていないと感じました。
最後の Ruby の実行例でも、''で囲まれて展開されないはずの $DATA が
実際には展開されたり、エスケープしたはずの「"」が
実際にはされなくてエラーになったりしました。
bash ではちゃんと思い通りの結果が得られます。
シェルスクリプト言語としては、sh をお使いになった方が
リダイレクションなどいろいろと楽だと思います。
http://faqs.jmas.co.jp/FAQs/csh-whynot-jp
bash でもバージョン2から配列が使えるようになっています。
表記は「${DATA_ARR[1]}」のようになります。あ、「man gawk」も忘れずに。
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manua …
参考URL:http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/awk.ht …
No.1
- 回答日時:
以下のようなスクリプトを作成してください。
#!/bin/csh
set DATA = "data1;data2;data3;data4"
set DATA_ARR = `echo $DATA | awk '{n=split($0,arr,";") ;for (i=1;i<=n;i++) print arr[i]}'`
echo "DATA=$DATA"
foreach i ($DATA_ARR)
echo $i
end
実際に必要なのは3行目のset DATA_ARR...です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
cshの文字列操作(0埋め)
その他(プログラミング・Web制作)
-
Cシェル内でBシェルの様な関数の記述方法はありますか?
UNIX・Linux
-
Cシェルでのファイルからの入力について
その他(OS)
-
-
4
cshで拡張子を除いたファイル名を取得したい
その他(プログラミング・Web制作)
-
5
「照合パターンに合いません」の回避法
UNIX・Linux
-
6
cshでsubstr
その他(プログラミング・Web制作)
-
7
cshでファイルサイズ取得
その他(プログラミング・Web制作)
-
8
UNIX(Cシェル)での数値判断での条件分岐がうまくいきません。
UNIX・Linux
-
9
シェルスクリプトでファイル内の数値文字列を数値として扱うには
その他(プログラミング・Web制作)
-
10
cshで変数に値が入っているかどうか見る方法
UNIX・Linux
-
11
【csh】ファイルの中の値を配列変数として取得するには?
その他(プログラミング・Web制作)
-
12
cshの条件式について教えてください
その他(プログラミング・Web制作)
-
13
『存在するかどうか分からない』環境変数にcshで新しいパスを設定したい
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アセンブリ言語について。
-
Google ColaboでGUI作成
-
vba クリップボードクリアにつ...
-
batファイル、コマンドプロンプ...
-
フロントエンドエンジニアをし...
-
HTMLソースが表示のページのも...
-
このURLで広告を出しているのは...
-
文系のSE志望です。プログラミ...
-
プログラミングのやり方ざっく...
-
プログラミング
-
近年誕生したプログラミング言語
-
プログラミング言語について
-
Pythonでgif画像が上手く作れない
-
pythonで複数画像からgifを作る...
-
Webサイト内に埋め込んだmp4動...
-
Gitについて質問。 クローンし...
-
python エラー
-
過剰なオブジェクト指向脳から...
-
プログラミング ソースコード
-
コトリン言語について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングのやり方ざっく...
-
vba クリップボードクリアにつ...
-
アセンブリ言語について。
-
Google ColaboでGUI作成
-
コトリン言語について。
-
fortran write文について マチ...
-
AIのプログラムについて教えて...
-
フロントエンドエンジニアをし...
-
プログラミングについて プログ...
-
プログラミングの進学について
-
Web初心者です。 簡易的なWebペ...
-
Blender
-
pythonでAmazonのほしいものリ...
-
このURLで広告を出しているのは...
-
python エラー
-
テキストファイルの1行目のみを...
-
VBAでパワーシェルを実行したい...
-
HTMLソースが表示のページのも...
-
プログラミングを学ぼうと思い...
-
Python... 環境設定 初心者です...
おすすめ情報