• 締切済み

Linuxでのシェルプルグラミングでファイル内の数字の読み込み

Linuxでのシェルプログラミングについての質問です。 (#!/bin/shを使ってます。) 改行、空白、数字をランダムに含むファイルを複数読み込んで、それぞれのファイルから数字だけ一個ずつ抜き出すにはどうすればいいでしょうか? 最初に二個の数字(A,Bとする)読み込んで、その二つの最大公約数(C)を計算した後、さらに次の数字(D)を読み込んで次は先ほどの公約数(C)と新しく読み込んだ数字(D)の最大公約数(E)を計算して・・・を繰り返していくプログラムを作ろうとしています。 最大公約数を計算するwhile loopはできています。数字はファイルから読み込まれるため、一個ずつ空白、改行を無視しながら読み込んでいかなければいけないと思うのですが、どのようにやっていけばいいのかわかりません。

noname#200754
noname#200754

みんなの回答

  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.3

ファイルがそう大きくなければ、こんな感じで簡単に。 for n in `cat file` do echo $n done ファイルが非常に大きければ、まず空白を改行に直して、空行を取り除いて、1行ずつ読む。 cat file | tr ' ' '\n' | grep -v '^$' | while read n do echo $n done

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

sed とか活用すれば、正規表現を使えるんじゃないかな。

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

数字が 1行に (高々) 1個だけあって, しかも前後に余計な空白がないなら grep でも使えばいいと思う.

関連するQ&A

  • エクセル 違うファイルにある数字の合計を出す

    エクセルファイルが40枚ほどあります。 それぞれのファイルの決まった位置(セル)に F社、D社、C社、B社、A社 B社、G社・・・など、30社ほどの会社名があります。 それぞれの社のすぐ右横には、数字があります。 それぞれの社ごとの、合計を出したいのですが・・・。 その合計の数字は、別ファイルの1枚のシートに出したいです。 これを、マクロを使わずに表示させることは可能ですか。 それぞれのファイルの決まった位置というのは、 B3からB8まで、D5からD12まで  C15からC20までとして その中には、空白のセルもあります。 30社ほどの会社名が、ランダムに入っています。 これが複数枚(40ほど)あります。 これを、別ファイル、1枚のシートに A社、B社、C社、D社・・・の合計を出したいのですが・・。 よろしくお願いします。

  • cはpとqの公約数で、dを最大公約数とします。

    cはpとqの公約数で、dを最大公約数とします。 ここで、最大公約数となる条件として 1)dで2つの整数pとqが割り切れる。 2)pとqのどんな公約数cでもdを割り切ることができる。 この関係を使って、c=p∧qで表すとします 例)p=18 q=12 とすると 18=1*2*3*3 12=1*2*2*3なので 公約数cは二つの共通部分 1 と 2(1*2より) と 3(1*3より) と 6(2*3より) となる ここで質問ですが、最大公約数dは d=max c つまりd=max{p∧q}で表すことはできますか? できれば証明をお願いしたいです>< 表すことができなければ、 p∧qを使って他に表す方法があれば教えてください。

  • 未知数があるとき ユークリッド互助法 適用 方法

    問題 8n+4と7n+1の最大公約数が5になるような100以下の自然数nはいくつあるか? 解答 ユークリッドの互助法を使う 8n+4と7n+1の最大公約数=7n+1とn+3の最大公約数=n+3と20の最大公約数 さらに……… という問題と解答なのですが、疑問があります (以下 自然数~ を 自~ と表記します) ユークリッドの互助法とは 自aと自bの最大公約数=  (自a=自b×自c+自d ∧ 0≦自d<自b ⇔ 自b=~ ∧ 自d=~)で定まる自dの値 と 自b  の最大公約数 が成り立つという事実を使って2数の最大公約数を、より簡単な2数の最大公約数に還元し もとめる方法ですよね? そうなるとこの場合にどのように適用していいのかわかりません。 8n+4と7n+1の最大公約数=7n+1とn+3の最大公約数 の部分は 8n+4=(7n+1)×自c+自d ∧ 0≦自d<7n+1 ⇔  自c=1 ∧ 自d=n+3 で自dが一通りに定まるのがわかるのですが 7n+1とn+3の最大公約数=n+3と20の最大公約数 の部分は 7n+1=(n+3)×自d+自d ∧ 0≦自d<n+3 ⇔  自c=  ∧  自d= となるので 自cが7以下であることはわかりますが、自cは1.2.3.4.5.6のどれでもokですよね そうすると自dが一通りに定まらず、どうやっていいのかわかりません

  • アルファベットと数字が入ったセルをただの数字として認識してほしいんです

    アルファベットと数字が入ったセルをただの数字として認識してほしいんです。 A1、B1セルに数値があり、 ・C1セルに「k10」と入力された時、D1セルに「10*B1」の計算結果を ・C1セルに「c/s100」と入力された時、D1セルに「100*A1」の計算結果を 自動表示されるようにしたいのですが・・関数などで何か方法はありますか? ※C1セルには「k○○」「c/s○○」の2種類あり、アルファベットと数字の間にセル内改行が入っています(○○は数字) ご存知の方、どうぞよろしくお願いします。 詳しくご回答いただけるととても助かります。

  • アルゴリズムで

    今エクセルにて簡単なデータ処理をしているのですが、どうしても浮かばないアルゴリズムがあるので、教えて下さい。 Excel2003 VBAにおいて、 A列にアルファベットが並んでいます。 B列、C列には適当な数値が入っています。 Do~LoopにてA列の空白欄までループを回していて、その中で決めたアルファベットが来た時(例えばF)に、そこから次の指定したアルファベット(例えばS)が来るまでB列のセルの数字とC列のセルの数字を足したものをD列のセルに記入します。 決めたアルファベットには規則性はないのですが、一度使った全てのアルファベットが終わるまで来ません。 具体的に描かせてもらうと、A~LまでK~Zまでが分かれており、A~Lはランダムに順に並んでおり、次に順にK~Zまではランダムに並び。全てのアルファベットが終わったら、またらA~Lまでランダムに並び、次にK~Zまで並びます。 これが、何回も続いています。 先の例えに準じて書かせていただくと、Fが来たらそこからB列とC列の計算を始めて、Sが来たらその計算を終える。 また、次にFが来たら、B列とC列の計算を始めてSが来たらその計算を終える。 と言うものです。 これに関して、どうしてもアルゴリズムが浮かびません。 y=1 Do Until Cells(y,1).Value = "" If Cells(y,1).Value = "F" Then … End If y=y+1 Loop と考えたのですが、こうなるとFが来た時だけしか処理をしません。 ランダムに来るFからSの部分を計算するにはどうしたらよいでしょうか? お知恵を拝借させて下さい。 お願いします。

  • 「=RANDBETWEEN」で、同じ数字を出さないようにしたいのですが。

    「Excel2003」を使用しています。 B1のセルに「=RANDBETWEEN(A1,A2)」 と入れて、ランダムな数字を出すように しているのですが… 1度出た数字を、A2に入れた最大値の再計算回数を 超えるまでは、2度と出ないようにするという方法は あるでしょうか? つまり、最小値が「1」で最大値が「10」の場合、 10回再計算した場合、全て違う数字が出るように したいのです。 (11回目からは当然重複してくるわけですが…) マクロではなく、出来れば関数で なんとかしたいのですが… 宜しくお願い致します。

  • ファイルの読み込みについて

    いつもお世話になっています。 早速質問なのですが、VBのファイル処理において固定長データのテキストファイル読み込みの処理で、 固定長データの改行コードがChr(10)になっているデータがあります。 下記のどのOpenステートメントを使用しても、1行読み込みではなく全行読み込まれてしまうのです。 ↓ファイルモード (1)Open strInFile For Input As #intInFile (2)Open strInFile For Random As #intInFile Len=文字数 (3)Open strInFile For Binary As #intInFile ちなみに読み込みのモードは ・Line Input ステートメント ・Get ステートメント の2つを使用してみました。 改行コードの種類に依存せずにデータを1行読み込む方法を教えていただきたいです。

  • 0,1,2,3,4,5の6個の数字から、3個の数字

    0,1,2,3,4,5の6個の数字から、3個の数字を1つずつ取り出し、取り出した順に並べて数をつくる。 このとき、3桁の数になる確率を求めよ。 ーーーーーーーーーーーーーー という問題で解答の途中式を見ると、 確率の分母に当たる部分が 6P3 となっていました。 なぜ6C3では無いのでしょうか? 6C3だと思った理由は、 6C3を計算して3つ数字を選ぶと、問題文の「取り出した順に並べて数をつくる」という制限により自動的に順番が決まる と思ったからです。

  • 有効数字について

    有効数字について C=A×B×DのCを有効数字3桁で示せという場合 A=1.12 B=8.96 が既に定められているとして そこにD=128と入れて計算したい場合はDをどのように設定すれば良いのでしょうか?やはり1.28×10^2と設定するべきでしょうか?

  • 整数問題

    二つの奇数a,b にたいして,m = 11a + b,n = 3a + b とおく.つぎのことを証明せよ. m,n の最大公約数は,a,b の最大公約数をd として,2d,4d,8d のいずれかである. 僕はユークリッドの互除法を考えました。 (11a+b)=(3a+b)*1+8a よってmnの最大公約数は3a+bと8aの最大公約数である。 さらに(3a+b)=(3/8)*8a+b として8aとbの最大公約数が求める最大公約数と考えましたが、ここで矛盾が生じます。 bは奇数であるので偶数の2d等を因数に持たない。 よく考え直してみたのですが、ユークリッドは商が整数にならなければならないのでしょうか?2回目にユークリッドを使うときに商が3/8となってるのがまずいのでしょうか? またこの問題はどう解いたらよいでしょうか?教えてください。