• ベストアンサー

shellプログラミングで困っています。。

こんにちは。 お世話になっております。 現在shellを用いてツールを作りたいのですが、 上手くいかず困っています。 どなたか教えてください(>_<)!! "1","あああ","いいい" というようなCSVファイルを番号の部分だけ どんどん連番になるようなshellを作りたいです。 "1","あああ","いいい" "2","あああ","いいい" "3","あああ","いいい" ・    ・    ・ といった感じで。。。 そのshellはユーザにスタートの番号とカウント数を入力させると、 指定されたスタート番号からカウント数分だけ データを作るといった感じにしたいのです。 例えば、ユーザがスタート数:5とカウント数:2 と指定したら "5","あああ","いいい" "6","あああ","いいい" といったcsvファイルが作成される感じです。 作成するcsvファイルは1つで中身が ユーザの指定によって変化する仕様です。 shellプログラミングは全くの初心者で 何から手を付けていいのかもわからず困っています。 期限が迫っていてどうしようもないので どなたか教えてください。。 お手数ですが、よろしくお願いいたします。

noname#229153
noname#229153

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

  • ベストアンサー
noname#89477
noname#89477
回答No.2

#!/bin/sh num=$1 last=`expr $1 + $2` while [ $num -lt $last ] do echo "\"$num\",\"あああ\",\"いいい\"" num=`expr $num + 1` done シェルにもC-shell,bashなどありますが、特に指定がなかったのでshにしました。 起動方法としては、 sh csv.sh 5 2 あるいは、実行権を付与して ./csv.sh 5 2 などです。 Unix,Linuxどれでも動作すると思いますが、#1さんも言われているように別にシェルにこだわる必要もないのではと思いますが。 もし拡張性を考えるのならば、むしろperlがいいのではとも思います。 perlならば大抵のUnix,Linuxで動作します。 ※一応、動作確認しましたが、書き写しなのでもしミスがあったらば済みません。

noname#229153
質問者

お礼

こんばんは。 ご回答ありがとうございます!! シェルはshです。 シェルで作成するよう依頼があったのでシェルにしました。 今後勉強して使い分けられるよう努力します。 本当に丁寧なご回答ありがとうございます(>_<)☆

noname#229153
質問者

補足

すみません。。。説明が下手でつたわらなったのかもしれないのですが、 希望としてはshを実行したら、同ディレクトリにcsv形式のファイルが作成されるようにしたいです。 中身は"1","あああ","いいい" "2","あああ","いいい" などです。 出力をcvsファイルにするにはどうしたらよいのでしょうか。 質問ばかりですみません。

その他の回答 (5)

noname#89477
noname#89477
回答No.6

#4です。#5さんへ へぇ~、へぇ~、へぇ~(って古いけど) そんなやり方もあったのですね。(無駄な書き込みで済みません)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

3. done > a.csv というのも可能ですね>#4. まあ 1 が普通ですが.

noname#89477
noname#89477
回答No.4

#2です。 やり方としては、2通りあります。 1.外出し sh csv.sh 5 2 > a.csv 2.組み込み(shell内部で) 2行目に追加 (>> は追記なので) rm -f a.csv echoの箇所を echo "\"$num\",\"あああ\",\"いいい\"" >> a.csv にすれば、ファイル(a.csv)へ出力できます。

noname#229153
質問者

お礼

最終的にはsqlldrを使いたいので 組み込んでみます☆ 本当にありがとうございます。 今から作成してみます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

C で書ければだいたい Bシェルでもなんとかなる. i=0 while [ $i -ne $2 ]; do n=`expr $i + $1` echo "\"$n\",\"あああ\",\"いいい\"" i=`expr $i + 1` done ああ, "あああ" とか "いいい" が出力できることが前提.

noname#229153
質問者

お礼

こんばんは。 ご回答ありがとうございます。 シェルはshになります。 本当にありがとうございます。 早速作成してみます。

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.1

OSは何ですか? Linux系OSなら、seq でほとんど用が足りそうです。指定する数字が、開始・終了になりますが。 seq -f '"%g","あああ","いいい"' 5 6 Unix系OSだとseqの機能が違うかもしれないので、これじゃ駄目かも。

noname#229153
質問者

お礼

こんばんは。 ご回答ありがとうございます。 使用するOSはUNIXです>_<。。。

関連するQ&A

  • shellプログラミングについて

    お世話になっております。 shellプログラミングで質問があります。 csvファイルを読み込み、特定の文字列を置換して 新しいcsvファイルを作成したいのですが、 うまくいきません。 test.csvの内容は "00000","あああああ","AAAAA" となっており、 $TESTには今11111が入っています。 sed -e 's/00000/$TEST/' test.csv >> new_test.csv を実行すると、new_test.csvは "$TEST","あああああ","AAAAA" となってしまいました。 "11111","あああああ","AAAAA" となるようにしたいのですが、どのように修正したらよいのでしょうか。 説明が下手で恐縮ですが、どうぞよろしくお願いいたします。

  • シェルプログラミングが動きません(中級)。どなたか教えてください。

    現在プログラミングを打っていますが動きません。 動作内容は下記の例で <1>2008-07-07のディレクトリを作成する。 <2>*.csv* の中からgrepでabcdeを検索する <3><2>の条件に当てはまり grep で 2008-07-07を検索してwcでカウントしてファイルに出力します。 <現象>ディレクトリが作成されファイルが作成されるが、ファイルの中身がカウントされない。(0が出力される) 投入コマンド ./out.sh 2008-07-07   ファイル名 引数 out.sh ---------------------------------------- mkdir -pm 777 /work/abc-$1 grep -h '/abcde' *.csv* | grep $1 | wc - > /work/abc-$1/gd-$1.csv -------------------------------------------- どなたか心優しい方がりましたら教えてください。

  • shell 変数について

    お世話になっております。 たびたびすみません。 shellプログラミングで質問です。 以下のようなプログラムを作成したところ、 引数に2147483648以上の数値を与えて実行すると 変数に代入される値が-マイナスとなり、 おかしくなってしまいます。 シェル変数の上限は2147483647なのでしょうか? だとしたら、これ以上の数値を代入することはできないのでしょうか。 お手数ですが、よろしくお願いいたします。 #!bin/sh firstno=$1 echo "do you make a file?(y/n)" read ans if [ $ans = "y" ]; then sed -e 's/AAA/aaa/' aaa.csv >> aaaaaa.csv firstno=`expr $firstno + 1` echo "next no is \"$firstno\"" fi

  • ハフマン符号化プログラミング

     学校の課題でVisualStudioで実現できるハフマン符号化プログラム(3次拡大)を作成せよ。という課題が出題されました。  しかし私は今まで入門程度のプログラミングしかやったことがなく、。指定されたファイルの文字数を調べる程度の事しかできない程度のプログラミングの知識なのでさっぱりです。  指定されたtxtファイルを読み込んで、文字数を数えて、文字の種類を調べて、各文字の発生確率を調べて、各文字を3次拡大行列にし、ツリー構造のアルゴリズムを作成し、各値を2進数に変換して、2進数に変換したものをtxtファイルにして保存するということは何となくわかるのですが、それを実現する知識がありません。  プログラミングの知識をお持ちの方のご協力をお願いいたします。

  • shell lftpでsftp接続

    Shellのスクリプトの中で次のコマンドを記述しています。 lftp -u "user","pass" sftp://IP 操作対象ファイルがあるDIRに移動後↓ >mv *.csv home/oracle/work/ のように拡張子がCSVのファイルをすべてworkに移動したいのですが、 これをsh -x で実行すると、 Access fairure: No such file (*.csv) と出力されてしまいます。 複数ファイルのディレクトリ移動はできないのでしょうか? どなたかご存知の方がいればご教示いただきたく存じます。

  • Shellコマンドで再起動する方法を教えてください。

    おはようございます。 いつも申し訳ございません。 ファイルを指定して実行の欄に入力したり、 Shell("RUNDLL32 USER32.DLL,ExitWindowsEx") のような方法でウィンドウズを再起動したいのですが、 どのようにしたら良いでしょうか。 「shutdown -r」だと可能なのですが、 確認のカウントダウンが出てしまうので、 別の方法を探しています。 APIの設定をして、 ExitWindowsEx(2, 0)でも良いのですが、 Shellの方法では不可能でしょうか? よろしくお願いいたします。m(__)m

  • XPだけ「Shell:Common Desktop」の結果が違う

    「ファイル名を指定して実行」で Shell:Common Desktop を実行した結果について、WindowsXPとWindows7/Vista/2000で違う結果になります。 私はてっきり HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders で定義されたものが開くはずだと思っていました。 Windows2000ではAll Users以下の「デスクトップ」フォルダが開き、Windows7とWindowsVistaではパブリックフォルダ以下の「デスクトップ」フォルダ が開きます。上記のレジストリの通りです。 しかし、WindowsXPでは上記レジストリで定義されているAll Users以下の「デスクトップ」フォルダは開かず、現在ログオンしているユーザーの「デスクトップ」フォルダが開きます。 他にも知っている「Shell:Common ****」を試しました。 shell:Common AppData shell:Common Desktop shell:Common Documents shell:Common Favorites shell:Common Startup などを試した場合と shell:AppData shell:Desktop shell:Documents shell:Favorites shell:Startup を試した場合を比較すると、XPにおける「shell:Common Desktop」の結果のみが他と異なっています(XPパソコンの5台くらいでしか試していませんが)。 XPでの「Shell:Common Desktop」だけが間違っているとしか思えない結果になっているのですが、その理由が知りたいです。 もしこの結果が正しい動作なのだとすると、何を参照してそのときログオンしているユーザーのデスクトップフォルダが開くのかを知りたいです。

  • C言語のプログラミングについてです><

    今C言語のプログラミングの勉強をしているのですが、わからないプログラムがでてきたので教えてくださる方がいらっしゃれば、ご教授願いたいです。 数当てゲームの作成 1~9(0は除く)のなかから4つの異なる数字をランダムで選択し、4桁の数をつくる。ユーザは4つの数字の並びを入力して、作られた数を当てる。 ユーザの入力した数と作られた数を比較して、同じ数字が同じ桁にある場合は"Hit"というヒントを与える。また、同じ数字が異なる桁にある場合は"Blow"というヒントを与える。すなわち、作られた数が5849で、ユーザが4829という数値を入力した場合、"2 Hit 1 Blow"というヒントが表示されるようにする。 ユーザは10回まで、入力するチャンスが与えられる。 といった感じのプログラミングなんですが、C言語初心者である自分にはまったくわかりません; ; どなたかわかる方がいらっしゃれば、助けていただけないでしょうか?よろしくお願いします!

  • プログラミングができません

    友人に相談を受けたのですが、回答できなくて困っています。 条件1)ファイル名を引数とする。 条件2)-の後にオプション指定できる。   例)特定の文字数をカウントする。 -オプションで複数文字指定。     特定の文字を大文字に変換する。 -オプションで複数文字指定。-abd     特定の単語の数を数える。 -オプションで単語を指定。-word     そのほか、各自でアイデアを発揮すること。      処理対象は、ファイルとする。 というようなプログラムを作りたいのです。 よろしくお願いいたします。 (自分で作ったらエラーだらけで、全くできませんでした…)

  • プログラミングが分かりません。

    プログラミングが分かりません。 プログラミングの授業ではなくデータベースデザインの授業をとっていますがプログラミングに関係していると思いこのカテゴリーで質問させてもらいます。 具体的なC言語を使ってプログラミングはしてませんが構造化プログラムについて授業内で勉強しています。そこでこんな問題が出てきました。 一人のユーザーから適当な数を1つずつ与えられて最後に平均を出す(例えば、5,8,2,3,1,1 と数を一つずつ言ってその時の平均の値を求める) BEGIN SUM = COUNT = 0 DOWHILE There are more numbers in the set ACCEPT NUM FROM USER     SUM = SUM + NUM COUNT = COUNT + 1 ENDDO AVG = SUM/COUNT PRODUCE AVG TO USER END コレをヒントに一つ宿題が出されました。       Aさん 6 8 4 Bさん 9 7 6 Cさん 8 8 5 というように一人三種類の数字がありそれぞれA、B、Cさんの合計を出して一番数字が多い人を決める この場合Bさん(合計22) 最初に示したヒントから考えてどのようにすればBさんを答えとして導くことができますでしょうか? 最初に示した感じでどなたか教えていただけますか?よろしくお願いします。具体的なC言語も指定しないと説明しづらいと思いますのでそのときはこのカテゴリーで質問させてもらった通りにVisual Basic で答えて下さってもかまいません。 自分で考えたのも載せますがやっぱり途中で分からなくなってしまいました。 COUNT = 0, MAX = 0, SUM = 0 DOWHILE there are more people DOWHILE there are more numbers in the set  ACCEPT NUM FROM USER  SUM = SUM + NUM  COUNT = COUNT + 1

専門家に質問してみよう