• ベストアンサー

100文字が並ぶテキストを10行10列にする方法(Bシェルにて)

100文字が並ぶテキストをBシェルにて10行10列にする方法を教えてください。 テキスト(test.txt)には、次のようにスペースで区切られて100文字入っています。(この例の様に規則性はありません) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ..(省略) ↓これを 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 (省略) の様にするやり方を教えてください。 Bシェル初心者です。宜しくお願い致します。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.4

手元にはbashしかないですが、たぶんこれでBシェルでも動くと思います。 set `cat test.txt` while test "$1" do echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} shift;shift;shift;shift;shift;shift;shift;shift;shift;shift done

yumisa1
質問者

お礼

ありがとうございます。 実は、100文字が並ぶテキストと書いたのですが、2048×2048個が並ぶテキストです。 これを2048行2048列にしたいと思っています。 次の箇所で、 ************************************************************* do echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} shift;shift;shift;shift;shift;shift;shift;shift;shift;shift ************************************************************* 10×10=100個にしているという事でしょうか。 これを応用すれば出来るでしょうか…。試しています。

その他の回答 (3)

  • 10940
  • ベストアンサー率21% (41/187)
回答No.3

ご参考に http://www.netfort.gr.jp/~dancer/diary/daily/2005-Jun-16.html.ja IFS=' ' とすれば空白区切りも扱えます。 でも100文字も扱えませんが...(苦笑) やっぱりawkやgrepを呼び出すことを考えたほうがよいでしょう。

yumisa1
質問者

お礼

ありがとうございます。 実は、実際にやりたいテキストファイルは、2000行2000列程になります。 難しそうですね…。

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

う~ん, 私も #1 と同意見です. Bourne シェルに固執しない方が幸せじゃないかな. 入力データがスペースで区切られているので read とか for とかを駆使すればできそうな感じではあるんだけど.... 正直なところ, 素直に普通のプログラム言語を使った方がいいと思います. というか, Bourne シェルに限定する理由ってなに?

yumisa1
質問者

お礼

そうなんですか…。Bシェルなら少しだけ分かるので、Bシェルで作りたいと思ったのですが、ちょっと無理そうですね。 このシェルは、もともと、あるプログラムを動かしたところ、 結果が出るのに2週間程かかる事が分かり、このシェルによって、 テキストを整えれば、短縮されるかなと思って、作ろうと試みました。 他の言語を使うとなると、その2週間を越す自信が無いので…。 ありがとうございました。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

solarisのman shを読んだ限りだと、Bシェルだけで実現するのは難しいかも。bashで良いならこんな感じ: s=12345678901234567890 seplen=6 for (( pos=0; $pos < ${#s}; pos=(($pos + $seplen)) )); do echo ${s:$pos:$seplen} done ファイルから読み込むにはreadとか使う必要があります。 本当にshしか使えない(shがbshで外部コマンド一切NGとか)じゃないんだとしたら、perlとか使ったほうが楽だと思います。

yumisa1
質問者

お礼

ありがとうございます。 Bシェルなら少し分かるので、Bシェルで書きたいなと…。 ファイルから読み込むならreadですか。 勉強してみます。ありがとうございました。

関連するQ&A

  • grepによる文字列検索のシェル作成の手順

    Solaris9のOSにて、以下の仕様のシェルを作成したいと思っています。 特定のディレクトリ配下にある全てのファイル内で特定の文字列「abc」のある行を抽出し、ファイル化したい。 (検索対象が1ファイルであれば、grep -n abc test.txtでよいですが、ファイル名がたくさんある場合のシェルの作り方がわかりません。) また、どのファイルから検索したのかがわかるように抽出した行の前にファイル名をつけられると大変助かります。 例) ---test1.txtから検索--- 8:XXXXabcXXXX 11:XXXXabcXXX ---test2.txtから検索--- 10:XXXXXXXXabcXX お手数ですが、宜しくお願いします。

  • 検索した文字列がある行を検索するには

    OPEN "A.txt" QWER gohjoij OPEN "B.txt" OPEN "QWERT" Write A.txt jortyu end と書かれたテキストファイル(ファイル名を"ABC.txt"とする。)があるとします。これを 1.OPEN "*.*"(*=ワイルドカード)という文字列の*.*のみに絞る 2."1."の内" "の中に、"."が無い文字列は無視する うえでリッチテキストボックス1に出力するようにします。リッチテキストボックス1には A.txt B.txt と出力されました。これをさらに[A.txt B.txt]がある行全体を、 1.別のリッチテキストボックス(リッチテキストボックス2)に出力する やり方がわかりません。この例だと、リッチテキストボックス2には OPEN "A.txt" OPEN "B.txt" Write A.txt jortyu と出力したいです。今のスキルだと到底作れそうに無いので、どなたか教えてください。

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

    こんにちは。 シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入したいと思います。 ・sample.txt (挿入前) -- <ABC> <ABC> Hello! </ABC> </ABC> -- ↓ ・sample.txt (挿入後) -- <ABC> <ABC> Hello! </ABC> Good Morning Good Evening </ABC> -- 上記のように、テキスト末尾から検索して、 はじめて表れた"</ABC>"のタグの前に、 Good Morning Good Evening という2行の文字列(無理なら1行でも)を追加したいと考えています。 "</ABC>"タグは2つありますが、末尾から検索して初めて表れたもののみ対象です。 このような操作を行うには、 どのようにシェルを組み合わせれば良いのでしょうか? grepやsedを用いて考えてはいますが、よく分かりません。 (grepで末尾から初めて表れた"</ABC>"の行番号を取得し、 その上に、sedで文字列を挿入するなどですが・・・よく分かりません) どなたか、よろしくお願いします。

  • シェルで文字列を含んだ行だけを削除したい!

    文字列を含んだ行だけを削除したいと思って、 sed -e "/XXXXXXXX/d" destfile > destfile または grep -v XXXXXXXX destfile > destfile とやったら、全部消えてしまいました!(^^;) どうしてですか? そして、どうしたら正しい処理になりますか? すみません。シェル初心者です。 易しく、わかりやすく、教えて下さい!

  • DOS:テキスト内の特定行の次行に文字列を追加

    DOSコマンドプログラムでテキストファイル内の特定文字列を含む行の次の行に、指定した文字列を含む行を挿入する方法 Windows7の DOSコマンドプログラムで、下記の"input1.txt" を"output1.txt"に変換したいと思っています。 "input1.txt"内で"Name:"を含む文字列があれば、その行の次の行に、"A1:10.2"という行を挿入するDOSコマンドプログラムをご教授いただけないでしょうか。見つけた文字列行の次の行に挿入する方法というのが、できなくて困っています。 ---input1.txt------ Name: Tanaka B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 --------------- ---output1.txt----- Name: Tanaka A1:10.2 B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki A1:10.2 B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada A1:10.2 B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 -----------------

  • 特定の文字列が一致する行から、文字列を抽出する方法

    ファイルから、特定の文字列を検索し、その文字列に対応する文字列を取得したいのですが、どなたか方法を教えていただけないでしょうか? 処理: test.txt中に以下の文字列が記載されています。 ----- TEST011:FILE00 TEST01:FILE01 TEST02:FILE02 XTEST01:FILE01 XTEST02:FILE02 ----- test.txtから、TEST01に対応する文字列FILE01を取得したいです。 当初、strchrを利用すれば良いかと考えていたのですが、 TEST011の行が先に抽出されてしまい、うまくいきません。 どなたか解決方法を教えていただけないでしょうか。

  • テキスト内文字列検索 Perl言語

    テキストファイル内の文字列を「Perl」で検索したいのですが…。 例 aa.txtの中の"AA"を含む1行をデスクトップのbb.txtに追加書き込みをする。AAの部分は外部からのタイプで変化させる。 このようなPerlのプログラム、初心者ですがよろしくお願いします。

  • 行単位の文字列処理

    JAVA初心者です。 以下のようなファイル形式があります。 ファイル名(TEXT.TXT) //////////////////////////////////// Aa BFUNC1,abc,def Ab BFUNC2,ghi BFUNC3 /////////////////////////////////// ファイル行単位の先頭(1文字目)に処理の判定識別子が付きます。 A:2文字目の文字を既存の設定してある文字と置き換える。 B:,で区切り最初が関数名次からが引数になります。(例FUNC1(abc,def)) 上記をJAVAで記述したい場合どのようにしたらいいでしょうか? FileReader in = new FileReader("TEST.TXT"); BufferedReader br = new BufferedReader(in); String line; while ((line = br.readLine()) != null) { /*行単位の先頭一文字をチェック*/ switch(){  ←行単位の先頭一文字を判定するには記述するには?  CASE: "A": /*文字列置換*/ br.replace(str ,br); break; CASE:"B": /*方法(1)","で分解して連結する。最初はNextTokenで文字列を連結 させ、次に"("をつけ、次からNextTokenで","をつけていく。","がな くなったら")"をつけるようにするには? */   /*方法(2)","の最初は関数名なのでNextTokenで(1)と同様に"("をつけ    る。次からは行末尾までを一度に連結させ、最後に")"をつけるように   するには?*/ break; } }   ?の個所を教えてください。 ほかに簡単な記述などあればそちらも教えてください。

  • バッチファイルでテキストファイルの文字列を取得したい

    すみません、どなたか教えて下さい。 バッチファイル(test.bat)内で、他のテキストファイル(ok.txt)の文字列を取得したいです。 ok.txtは 20070614 TEST となってます。 この2つの文字列をそれぞれで取得する方法を教えて下さい。 よろしくお願い致します。

  • UNIX のシェル 文字の置換について

    シェルでファイルの文字列を置換したいです。 /*~*/のコメントの文字なので、1行数を変えたくないです。 ─────────────────────────── ※1文字分の空白を「_」で表示します。 test.txtファイルの「XXXXX」を「aa___」に置換する。 ─────────────────────────── 【test.txt 置換前】 /**************/ /*_XXXXXYYYYY_*/ /**************/ 【シェルの内容 test.sh】 #!/bin/csh set IN_henkan = `printf "%-5s" $1` perl -i -p -e 's/XXX/'$IN_henkan'/g' test.txt 【シェルを実行】 test.sh aa 【test.txt置換前 希望する状態】 /**************/ /*_aa___YYYYY_*/ /**************/ 【test.txt置換前 実際の状態】 /**************/ /*_aa_YYYYY_*/ /**************/ ─────────────────────────── 「aa」の後ろに1文字分の空白しか挿入されないです。

専門家に質問してみよう