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:~$


コメント