Bシェルで、1文字づつ読み込み、番地と共に出力する方法

このQ&Aのポイント
  • Bシェルで1文字ずつ読み込む方法を教えてください。
  • A~Pまでの文字が番地と共に並び、それを出力する方法を教えてください。
  • test.txtにどのように入力すれば良いかがわかりません。
回答を見る
  • ベストアンサー

Bシェルで、1文字づつ読み込み、番地と共に出力する方法を教えてください。

Bシェルで、1文字づつ読み込む方法を教えてください。 次のように文字が並んでいて、 A B C D E F G H I J K L M N O P それぞれの番地と共に、上記の文字を出力する場合、 どのようにしたら宜しいでしょうか。 入力ファイル:test.txt A B C D E F G H I J K L M N O P ↓ 1 2 3 4 1 A B C D 2 E F G H 3 I J K L 4 M N O P ↓ 出力ファイル A 1 1 B 2 1 C 3 1 D 4 1 E 1 2 F 2 2 G 3 2 H 4 2 I 1 3 J 2 3 K 3 3 L 4 3 M 1 4 N 2 4 O 3 4 P 4 4 番地に関しては、次のシェルを作成しましたが、 test.txtをどのように入力したら良いかが分かりません。 Xmax=4 Ymax=4 yy=1 while [ $yy -le $Ymax ] ; do xx=1 while [ $xx -le $xMax ] ; do echo $xx $yy | awk '{ printf(" %d %d ",$1,$2) }' >>out.txt xx=`expr $xx + 1` done yy=`expr $yy + 1` done 宜しくお願いします。

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

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

自信はないけど read と set を組合せるのかなぁ? 例えば yy=1 while read line; do xx=1 set -f $line while [ $# -gt 0 ]; do echo $1 $xx $yy shift xx=`expr $xx + 1` done yy=`expr $yy + 1` done < test.txt のような感じ? 手元でテストしてないので全く自信ありませんし, Bourne shell で set -f が使えるかどうかもわかりませんが.

yumisa1
質問者

お礼

ありがとうございます。 教えていただいた通りで、問題なく起動しました。 大変助かりました。 本当にありがとうございます。

関連するQ&A

  • Bシェルで、1文字づつ読み込む方法を教えてください。(バイナリ)

    Bシェルで、1文字づつ読み込む方法を教えてください。(バイナリ) 以前、下記の質問をして、回答を頂きました。 この中の入力ファイル『test.txt』がバイナリ形式だった場合は、 どのようにしたら良いでしょうか。 ### 質問 ############################################ 次のように文字が並んでいて、 A B C D E F G H I J K L M N O P それぞれの番地と共に、上記の文字を出力する場合、 どのようにしたら宜しいでしょうか。 入力ファイル:test.txt A B C D E F G H I J K L M N O P ↓ 1 2 3 4 1 A B C D 2 E F G H 3 I J K L 4 M N O P ↓ 出力ファイル A 1 1 B 2 1 C 3 1 D 4 1 E 1 2 F 2 2 G 3 2 H 4 2 I 1 3 J 2 3 K 3 3 L 4 3 M 1 4 N 2 4 O 3 4 P 4 4 ### 回答 ############################################ yy=1 while read line; do xx=1 set -f $line while [ $# -gt 0 ]; do echo $1 $xx $yy shift xx=`expr $xx + 1` done yy=`expr $yy + 1` done < test.txt ##################################################### どうぞ宜しくお願い致します。

  • 碁盤目の経路数

    某大学院の入試問題で、碁盤目状の経路において視点(0, 0)から終点(xmax, ymax)までの経路を求めるプログラムなのですが、ア~エの所がどうしてもわかりません。教えて頂けないでしょうか。 #include <stdio.h> int xmax, ymax; /* 終点の座標 */ int search_path(int, int); int main(void) { int n; scanf("%d %d", &xmax, &ymax); /* xmaxとymaxを読む */ n = search_path(0, 0); /* (0,0)から(xmax,ymax)まで経路数を求める */ printf("%d\n", n); return 0; } int search_path(int x, int y) { if (ア) return 0; if (イ) return 1; return search_path(ウ) + search_path(エ); }

  • 2行のセルの入れ替え。

     初めまして、よろしくお願いします。  セルに A B C D E F G H I J K L 1 a b c d e f 2 g h i j k l 3 m n o p q r 4 s t u v w x 5 " ・ " ・ " ・ " 100 "  という表があります。これを A B C D E F G H I J K L 1 a b c d e f g h i j k l 2 m n o p q r s t u v w x 3 " 4 " 5 " ・ " ・ " ・ " 100 "  という風に、偶数行のデーターを奇数行の後ろにつけるようにしたいと思います。無理ならば奇数行だけのデーター、偶数行だけのデーターとなるように、何かよい方法を教えて頂きたく、よろしくお願いします。

  • エクセルの使い方についてお教えください。

    エクセルの使い方についてお教えください。 例えば、 a | b | f c | g | j d | h | k | m e | i | l | n | o | のように、右肩下がりになっている列を、 a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | のように一列にまとめる方法は無いでしょうか? 何卒よろしくお願いいたします。

  • 順列・数え上げ

    よろしくお願いします。 ここに下のような390個の文字があります。 (A,B,C,D,E,F,G,H,I,J,K,L,M がそれぞれ10個ずつ、 N,O,P,Q,R,S,T,U,V,W,X,Y,Z がそれぞれ20個ずつあります。) この390個の文字から235文字を選んで一列に並べる方法は全部で何通りありますか。 A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z 以下、私が考えたことを書きます。 この390個の文字から235個の文字を選ぶ組み合わせの総数は、 (Σ[k=0~10]x^k)^13*(Σ[k=0~20]x^k)^13 を展開したときのx^235の係数ですから、 23463540513956137996043929988 通りだということは分かります。 この23463540513956137996043929988 通りのそれぞれについて235個の文字 の順列(同種のものを含む順列)を数え上げれば答えは出ると思いますが、これは あまりにも大変な作業です。 何かよい知恵はないでしょうか。

  • エクセルについて

    エクセルで A B C D E F G H I J K L M N O P Q R … と並んでいるデータを A B C D E F G H I J K L … のように並べ変えたいのですが、最も効率のよい方法を教えてください。 上記のアルファベット1つにセル1つです。 Office2007を使用しています。 以上、宜しくお願い致します。

  • 列A,列Bを参照して列Cにそれに対応する文字列を表示

    列A,列B,列C 4,8,A 4,9,B 4,10,B 4,11,C 4,12,C 4,13,D 3,8,E 3,9,F 3,10,F 3,11,G 3,12,G 3,13,H 2,8,I 2,9,J 2,10,J 2,11,K 2,12,K 2,13,L 1,8,M 1,9,N 1,10,N 1,11,O 1,12,O 1,13,P 列Aに1~4,列Bに4~20の値を入れ、 列Cに、計算式で上記のような文字列を表示させたいのですが、 if関数のネストが7つまでらしく8つ以上が出来ません。 何か方法がありましたらお願いします。 =IF(AND(A2=4,B2<=08),"A" ,IF(AND(A2=4,B2<=10),"B" ,IF(AND(A2=4,B2<=12),"C" ,IF(AND(A2=4,B2>=13),"D" ,IF(AND(A2=3,B2<=08),"E" ,IF(AND(A2=3,B2<=10),"F" ,IF(AND(A2=3,B2<=12),"G" ,IF(AND(A2=3,B2>=13),"H"))))))))

  • Excelで飛び飛びのセル(列)を参照したいのですが…その2

     ある「sheet1」で、G1="A",H1="B",I1="C",J1="D",K1="E",L1="F",M1="G",N1="H",O1="I",P1="J",Q1="K",・・というように文字が入力されているとすると、5列飛びの値A,F,K・・・(G1,L1,Q1・・・)が欲しいのです。そして、その値が「sheet2」に、C5=A,D5=F,E5=K,F5=P・・・となるようにしたいのです。ただ数値が5ずつ増加するのではなく、そのセルに入力されている文字列を参照したいのです。  それをまた、「sheet1」の、G2="A",H2="B",I2="C",J2="D"・・・の値でも同じ事をしたいのですが・・・。  よろしくお願いします。

  • C言語の配列の使い方について質問です。

    以下のプログラムを配列を使って見やすくしたいのですが、どのように作ったら良いでしょうか? 宜しくお願いします。 #include<stdio.h> int main(void) { int a, b, c, d, e, f, g, h, i, j, k, l, m ,n, o; /*5段目の処理*/ for(a = 1; a <= 15; a++) { for(b = 1; b <= 15; b++) { if(a == b) continue; for(c = 1; c <= 15; c++) { if(a == c || b == c) continue; for(d = 1; d <= 15; d++) { if(a == d || b == d || c == d) continue; for(e = 1; e <= 15; e++) { if(a == e || b == e || c == e || d == e) continue; // printf("%d %d %d %d %d\n", a, b, c, d, e); ////4段目//// if(a>b){ f=a-b; } else if(a<b){ f=b-a; } if(b>c){ g=b-c; } else if(b<c){ g=c-b; } if(c>d){ h=c-d; } else if(c<d){ h=d-c; } if(d>e){ i=d-e; } else if(e<d){ i=e-d; } // printf(" %d %d %d %d \n", f, g, h, i); /////3段目//// if(f>g){ j=f-g; } else if(f<g){ j=g-f; } if(g>h){ k=g-h; } else if(g<h){ k=h-g; } if(h>i){ l=h-i; } else if(h<i){ l=i-h; } // printf(" %d %d %d \n", j, k, l); /////2段目//// if(j>k){ m=j-k; } else if(j<k){ m=k-j; } if(k>l){ n=k-l; } else if(k<l){ n=l-k; } // printf(" %d %d \n", m, n); /////三段目///// if(m>n){ o=m-n; } else if(m<n){ o=n-m; } // printf(" %d \n", o); if(a != b != c != d != e != f != g != h != i != j != k != l != m != n != o){ printf("%d %d %d %d %d\n", a, b, c, d, e); printf(" %d %d %d %d \n", f, g, h, i); printf(" %d %d %d \n", j, k, l); printf(" %d %d \n", m, n); printf(" %d \n", o); } } } } } } }

  • エクセル 複数範囲から重複する数字を抽出

    エクセルで複数の範囲すべてに同じ数字があった場合、その数字を抽出することは出来ますか? 例:A1| B1 C1 D1 E1|F1 G1 H1 I1|J1 K1 L1 M1| N1 O1 P1 Q1| (1) B1~E1=(20 50 60) (2) F1~I1=(20 50 60) (3) J1~M1=(20 60) (4) N1~Q1=(20 50 80 ) (1)B1~E1、(2)F1~I1、(3)J1~M1、(4)N1~Q1の4つの範囲すべてに入っているのは、”20”になります。 A1に”20”と出したいのですが、どうしたら良いでしょうか。 どうぞよろしくお願いします。

専門家に質問してみよう