• ベストアンサー

シェルスクリプトに関する質問です

シェルスクリプトに関する質問です 以下のようなシェルスクリプトを書きたいのですが,難しくて出来無いのでどなたか ご協力お願いします。 foldaという名前のフォルダの中に1~100のフォルダがある. それら100個のフォルダの中に,それぞれfile.txtというテキストファイルがあり,これには 112.73 のように小数点ありの数字が1行書かれている. このfile.txtの内容を全て読み取って,それら100個分のデータを 1つのファイルに出力するスクリプト スクリプトファイルはfoldaの中にあるものとする. よろしくお願いします.

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

まあ、スクリプト使うほどのもんじゃないですが(コマンドラインの1行で十分) 1から100までの名前のディレクトリの下のfile.txtを全て読み取って継げるなら、 cat folda/1/file.txt folda/2/file.txt folda/3/file.txt (中略) folda/99/file.txt folda/100/file.txt > output.txt でoutput.txtに出力される。 # cat は CATenate (連結)の略。入力を連結して出力する、というのが本来の意味 こんなのを打ち込むのも馬鹿馬鹿しいので、ファイル展開を利用する cat folda/[1-9]/file.txt folda/[1-9][0-9]/file.txt folda/100/file.txt > output.txt シェルでは、いわゆる「ワイルドカード」は先に展開して、その展開したものをコマンドに渡す。なので、これが展開されると、最初の長いコマンドラインとまったく同じものになる。以下のものも同様 foldaの下で、file.txtの入ったディレクトリは、1~100のディレクトリだけとすると ( folda/a/file.txt とか folda/256/file.txtとかは存在しない、ということ) cat folda/*/file.txt > output.txt としても1~100/file.txtだけが対象となるのでOK. シェルとしてzshを使っていたら cat folda/<1-100>/file.txt > output.txt なんて書き方もできる。 これが、 ・「小数点ありの数字」だけ抜き出す とか ・file.txtに「小数点ありの数字が1行書かれている」かどうかのチェックも必要 とかだと、もうちょっと複雑になる。(でも、前者はやはり1行の1コマンドで十分)

その他の回答 (4)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

> foldaの上のディレクトリで行った方がよいのでしょうか. foldaの下の...とするために「folda/*/file.txt」と指定しています。 適切なものの変えれば、どこで実行してもかまいません

ou_gakusei
質問者

お礼

なるほど、ありがとうございます.

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

#3追記です。 これらのコマンドを入力するのは、foldaの上のディレクトリで。 ディレクトリツリーで書いたら here/ ←ここ +folda/ | +1/ | +2/ | +3/ | .... 「コマンドラインが長すぎる」とかエラーメッセージが出るようなら、foldaにcdで移動して実行する。 そのときは、引数の folda/ の部分は削除する。 例) cat */file.txt > output.txt

ou_gakusei
質問者

お礼

回答ありがとうございます. コマンド1行だけで済むというのは目からウロコでした・・・ ただ,コマンド入力をfoldaの中で行っても同様に出力できたのですが, foldaの上のディレクトリで行った方がよいのでしょうか.

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.2

まず find . -name file.txt を実行すると、目的のファイルが表示されますか? 表示されたら、もう一度以下のように実行してみてください find . -name file.txt -exec cat {}\; >> files.txt

ou_gakusei
質問者

お礼

前回は僕のタイプミスでした。。 正しく表示されました!どうもありがとうございました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

cd folda find . -name file.txt -type f -exec cat {}\; >> files.txt

ou_gakusei
質問者

お礼

回答ありがとうございます. 上記のコマンドを試してみたのですが,作成されたfiles.txtには何も表示されませんでした・・・