シェルプログラミングで文字列分割

このQ&Aのポイント
  • シェルプログラミングでCSVファイルからユーザ名とパスワードを読み込み、コマンドに渡す方法について説明します。
  • CSVファイルからユーザ名とパスワードを抽出し、シェルスクリプト内で利用する方法を紹介します。
  • awkやperlなどを使用してCSVファイルからユーザ名とパスワードを抽出し、シェルコマンドに渡す方法について解説します。
回答を見る
  • ベストアンサー

シェルプログラミングで文字列分割

みなさま始めまして。 非常に困っておりますのでよろしくお願いします。 ユーザ名とパスワードが記述された、CSVファイルがあります。 このファイルから、ユーザ名とパスワードを読み出し コマンドに渡したいと考えております。 例: user1,pass1 user2,pass2 user3,pass3 user1がユーザ名、pass1がuser1のパスワードです。 このようなファイルを読み込み $command user1 pass1 のように、実行したいと考えています。 awkやperlのページを見てみましたが よくわかりませんでした。 よろしくお願いします。

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

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

user1,pass1 という行から command user1 pass1 という行を (sed なり awk なり Perl なりで) 作って sh に (パイプで) 喰わせるのが簡単かなぁ. sed なら sed -e 's/,/" "/; s/^/command "/; s/$/"/' それ |sh くらい?

imaratio
質問者

お礼

ありがとう御座います!! のぞみの結果を得る事が出来ました!! Tacosanさん天才!! for `cat user.txt` 。。。のような感じで考えて行き詰ってました。 ありがとう御座いました!

その他の回答 (1)

noname#98978
noname#98978
回答No.1

二つの値を正規表現で取り出して、コマンドラインを組み立てて実行すればいいです。

imaratio
質問者

補足

その方法を聞いているのですが? 答えになって無くないですか?

関連するQ&A

  • cronを使って定期的にtelnetでメールサーバーにアクセスしたい

    cronを利用して定期的にtelnetにてメールサーバーにアクセスするコマンド を教えていただきたいのです。 そのために/sbinなどにhogeというような実行形式のファイルをおきますよね。 そこに記述する内容なのですが、 -------------------------------------- #! /bin/sh PATH=?bin:/sbin:/usr/bin:/usr/sbin export PATH telnet メールサーバー名 110 とした後に以下のコマンドを実行するようにしたいのです。 user ユーザー名 pass パスワード list quit ---------------------------------------- しかし上記を箇条書きにして実際に # /sbin/hoge 実行するとメールサーバーに入るところで止まってしまい quitコマンドを入力すると以下のエラーが返ってきます。 /sbin/hoge: user: command not found /sbin/hoge: pass: command not found /sbin/hoge: list: command not found /sbin/hoge: quit: command not found 記述を間違えているのでしょうから当然のエラーとは思うのですが、肝心の 記述方法が分かりません。 これが解決しないとcrontabに記述できないわけでして、どなたか分かる方は いらっしゃらないかと思ったのです。 よろしかったら教えて下さいませ。

  • 【シェルスクリプト】awkの結果を変数に格納したいです。

    【シェルスクリプト】awkの結果を変数に格納したいです。 パイプを使って、3つのコマンドを実行し、変数に格納したいです。 command1 | command2 | command3 command2 には grep が、 command3 には awk が入ります。 よろしくお願いします。

  • 文字列抽出について

    環境 ・Windows2000 SP4 ・Cygwin ※Windows環境ですがやりたいことがUNIX(bash)ベースなのでこちらに質問させていただきました。 あるディレクトリで ls -lAF | grep "^-" を実行し以下の出力(以下例)を得た後、awk等で「ファイル名」「サイズ」「日付」を抽出したいです。 (例) -rw-r--r-- 1 A0000001 なし 62 Mar 4 2005 aaa -rw-r--r-- 1 A0000001 なし 12099 Nov 7 2005 bbb -rw-r--r-- 1 A0000001 なし 62 Mar 9 2005 temp 1 ファイル名の取得は上記コマンド後、awkで$9を表示すれば、と思いましたが例の3番目の表示のようにファイル名がスペースで区切られていると表示が切れてしまい上手く取得できません。 $9以降の全てを抽出できるような方法をご教示いただけますか。awkでなくてもOKです。 よろしくお願いいたします。

  • AIX/HP-UXでパスワード変更シェルを作成したい

    AIX/HP-UXで一括でパスワード変更を実行するシェルを 作成したいと考えております。 (最終的には複数サーバの複数ユーザのパスワードを  一括変更したい) そこで、AIXで以下の様なシェルを作成したのですが、 パスワード変更することができませんでした。 -------------------------------------- PASS=$1   "新パスワード USER=$2   "パス変するアカウント名 passwd $USER sleep 5 $PASS sleep 5 $PASS -------------------------------------- passwdコマンド自体は実行されるのですが、 その後の新パスワードが入力されておらず、 passwdコマンドタイムアウト後に新パスワードが 実行され、"新パスワードの文字列"が見つかりません。 となってしまいます。 インターネット等で検索した結果、linuxであれば expectコマンドを使用して、passwdコマンドを実行した 際に出力される「新パスワード:」を待ってから 入力すればよいということがわかったのですが、 linuxでexpectコマンドに相当するものを、AIXでは 見つけることができませんでした。 AIX/HP-UXにおいて、シェルスクリプトにてパスワード 変更を実現する方法をご存知の方がいましたら、 教えてください。 よろしくお願いします。

  • 【継続質問】シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入

    シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入 の継続質問です。よろしくお願いします。 tacとawkを用いて、"ある特定の文字列の前に文字列を挿入"ということができるのは、 確認することができました。 例えば、  script.awk (awkスクリプト)  sample.txt (処理対象ファイル) という環境で、  $ cat script.awk  $ tac sample.txt | awk -f script.awk | tac > sample2.txt とコマンドを入力した場合、 sample2.txtに、処理が完了したテキストが作成され、 中身も問題ないことを確認できました。 しかし以下のようなことを実現しようと思うと、 うまく行きませんでした・ 「非対話的に上記の処理を行いたいのです」 上記の方法では、 catとtacと2回コマンドを叩く必要があります (1回にもできるのでしょうが…) できれば、自動的に流れる膨大なシェルスクリプトの処理の中で、 上記の処理を自動的に行うということを実現したいのです。 例えば、auto.shというシェルを実行すれば、 勝手にawkスクリプトを読み込み、勝手に変換したものを出力してくれる… そのようなシェルを作成したいと考えています。 そこで色々試しましたが上手くいきません。 1.コマンドの分解ができない tac sample.txt | awk -f script.awk | tac > sample2.txt の上記を、  #!/bin/sh  tac sample.txt  awk -f script.awk  tac > sample2.txt のようにシェルスクリプトに記述しなおして実行しましたが、 上手くいきませんでした。 2.script.awk(awkスクリプト)を内部に取り込み 外部ファイルとして存在している、script.awkをなんとか シェルに組み込もうと思って、  awk {(script.awkの内容をそのまま記述)} のように行いましたが、文法的にやはり無茶苦茶でした・・・。 正直、2番が無理であれば仕方ありませんが、 最低でも1は実現したいと思います。 1の方法だけでも良いので、どなたか回答をお願いします。

  • シェルから起動するコマンドの一部をマスクする

    シェルから起動するコマンドの一部にパスワードなどのセキュリティ情報が含まれている場合、それをpsコマンドなどによって見えなくするには、一般にどのような手法が採られているのでしょうか。 例えば、 #!/bin/sh USER=hoge PASS=hogehoge foo -u $USER -p $PASS というシェルを実行した時に、psコマンドで見ると foo -u hoge -p hogehoge と出ては困るわけで、 foo XXXXXXXX とかいう表示にできるとありがたいです。XXXXXXの部分は、ユーザ名やパスワードが表示されなければ、どんな表示でもいいんですけど…。

  • AuthUserFile用に登録するためには

     初めて投稿します。よろしくお願いしますm(_ _)m  質問の内容は『PerlでProftpdのユーザファイルを作成するには』です。ブラウザを使って、IDやパスワードなどを登録するつもりなのですが、その際FTPd用のユーザファイルを作成しようと考えています。コマンドライン上から直接実行すれば成功するのですが、ブラウザ上からクライアントの操作で書き込みができません。どうすればよいか、どうかご教授くださいませ。 [環境]    OS:VineLinux3.2  FTPD:proftpd-1.2.10 [nobody] HTTPD:Apache-1.3.3 [nobody] 実行ファイル名:sample.cgi [手順] 1.ブラウザ上でユーザ名とパスワードを入力してもらう  →このとき、ユーザ名を[$user]、パスワードを[$passwd]に格納します 2.system関数を使って、ユーザ情報とパスワードをAuthUserFileで指定したファイルに格納する  →指定したファイルは[/etc/ftp.pass]です  このときのコマンドは、 $file = "(FTPdのソースディレクトリ)/contrib/ftpasswd"; [system ("$file --passwd --file=/etc/ftp.pass --name=$user \--uid=510 --gid=100 --home=/home/hoge --shell=/bin/bash");]  です。ftp.passのパーミッションは[744]で、所有ユーザは[nobody]です。  ブラウザで実行する前にコマンドラインから実行しようとしたのですが、コマンドライン上から[perl sample.cgi]と打ち込むとエラーが出てきました。 [ ftpasswd: using alternate file: /etc/ftppasswd ftpasswd: --passwd: missing required argument: --home ]  よろしければ、どうかご教授くださいませ。

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

    現在プログラミングを打っていますが動きません。 動作内容は下記の例で <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 -------------------------------------------- どなたか心優しい方がりましたら教えてください。

  • プログラミング初心者です。

    プログラミング初心者です。 MACを使用しています。 Perlでプログラムを実行する際に、 % perl ファイル名 とせずに % ファイル名 とする方法としてファイルの一番先頭に % #! perlのフルパス を入れると本に書いてあります。その際、実行する前に % chmod a+x ファイル名 で実行権限を与える、とありました。 実際にやってみると -bash: ファイル名: command not found となってしまいます。 そこでperlのフルパスが間違いなのかとperlのヴァージョンを調べる方法 % perlのフルパス -v を実行するとちゃんとヴァージョン名が出ます。 あとは検索パスがファイルを格納しているフォルダに通っていないからだと思うのです。@INCに検索パスをあらかじめ加えるには % setenv PERL5LIB 加えたいパス で出来るようですが、ターミナルで実行しても Can't open perl script "setenv": No such file or directory となってしまいます。 これはどのように実行するのが正しいのでしょうか? 基本的な知識が乏しくてすみませんがお願いします。

  • プログラミング初心者です。

    プログラミング初心者です。 MACを使用しています。 Perlでプログラムを実行する際に、 % perl ファイル名 とせずに % ファイル名 とする方法としてファイルの一番先頭に % #! perlのフルパス を入れると本に書いてあります。その際、実行する前に % chmod a+x ファイル名 で実行権限を与える、とありました。 実際にやってみると -bash: ファイル名: command not found となってしまいます。 そこでperlのフルパスが間違いなのかとperlのヴァージョンを調べる方法 % perlのフルパス -v を実行するとちゃんとヴァージョン名が出ます。 あとは検索パスがファイルを格納しているフォルダに通っていないからだと思うのです。@INCに検索パスをあらかじめ加えるには % setenv PERL5LIB 加えたいパス で出来るようですが、ターミナルで実行しても Can't open perl script "setenv": No such file or directory となってしまいます。 これはどのように実行するのが正しいのでしょうか? 基本的な知識が乏しくてすみませんがお願いします。

    • ベストアンサー
    • Perl