FORTRAN、次はcutコマンド作ります。
まずcutをかけるファイルをseqコマンドで作っておきます。
takk@deb9:~$ seq 10010 100 13000 | split -dl10 takk@deb9:~$ ls x00 x01 x02 takk@deb9:~$ cat x00 10010 10110 10210 10310 10410 10510 10610 10710 10810 10910 takk@deb9:~$ cat x02 12010 12110 12210 12310 12410 12510 12610 12710 12810 12910 takk@deb9:~$
生成したファイルx00にcutコマンドを使ってみます。
takk@deb9:~$ cut -b1-3 x00 100 101 102 103 104 105 106 107 108 109 takk@deb9:~$
1Byte目から3Byte目の文字列を抽出しました。
ではFORTRANで作ってみようと思いますが、いきなりオプション解析するのは難しそうなので、固定で2Byte目から4Byte目を抽出するだけのプログラムから始めます。
このようになりました。
takk@deb9:~$ cat cut1.f CHARACTER*100 ARGS,LINE INTEGER N N = IARGC() DO 11111 I=1,N CALL GETARG(I,ARGS) OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1), 1 STATUS='OLD', 2 ACCESS='SEQUENTIAL') 10 READ(10,*,END=100) LINE CALL CUT(LINE) GOTO 10 100 CLOSE(10,STATUS='KEEP') 11111 CONTINUE STOP END SUBROUTINE CUT(LINE) CHARACTER*100 LINE 1111 WRITE(*,33333) LINE(2:4) RETURN 33333 FORMAT(A) END takk@deb9:~$
実行してみます。
takk@deb9:~$ gfortran cut1.f takk@deb9:~$ ./a.out x00 001 011 021 031 041 051 061 071 081 091 takk@deb9:~$
元のファイルの内容を横に並べて確認します。2Byte~4Byteの位置の文字列と一致しますね。
takk@deb9:~$ !! | paste - x00 ./a.out x00 | paste - x00 001 10010 011 10110 021 10210 031 10310 041 10410 051 10510 061 10610 071 10710 081 10810 091 10910 takk@deb9:~$
コメント