Last active
December 18, 2015 21:09
-
-
Save kunst1080/5845011 to your computer and use it in GitHub Desktop.
固定長レコード形式行順ファイルでもAWKがしたい! (ref http://www.slideshare.net/kunst1080/awk-23363479)
で使用したコード。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cat TESTCPY.cbl | cut -b8- | tr -d "\n" | tr "." "\n" | sed 's/^ *//g' | sed 's/(0*/(/g' | sed 's/[()]/ /g' \ | |
|nawk '$3=="PIC" ? ($4=="N" ? $5=$5*2:1) :1' \ | |
|sed 's/ *PIC *[9XN] */ PIC A/g' \ | |
|nawk '$3=="PIC" ? ($6=="COMP-3" ? $4="S9COMP3":1):1' | sed 's/S9COMP3 */H/g' | sed 's/ *COMP-3 *//g' \ | |
|sed 's/ *PIC */ /g' | cut -d " " -f1,3- \ | |
|nawk '{if($2=="OCCURS"){for(i=0;i<$3-1;i++){$(10+i)=$4;$2="";$3=""}}; $1="";print $0}' \ | |
|tr -d " " | tr -d "\n" | xargs -I% perl -nle "@o=unpack(%, \$_);print join(',',@o)" cobolfile.txt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
000200 03 FILEID PIC 9(02). | |
000300 03 NAME PIC X(10). | |
000400 03 PRICE PIC S9(11) COMP-3. | |
000500 03 TAGS. | |
000600 10 YYYY PIC 9(04). | |
000700 10 MM PIC 9(02). | |
000800 10 DD PIC 9(02). | |
001000 03 YOBI PIC X(24). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IDENTIFICATION DIVISION. | |
PROGRAM-ID. HELLO. | |
ENVIRONMENT DIVISION. | |
* | |
INPUT-OUTPUT SECTION. | |
FILE-CONTROL. | |
SELECT OUT01 ASSIGN TO "cobolfile.txt" | |
ORGANIZATION IS SEQUENTIAL. | |
* | |
DATA DIVISION. | |
FILE SECTION. | |
FD OUT01 | |
LABEL RECORD STANDARD | |
DATA RECORD OUT01-R. | |
01 OUT01-REC PIC X(51). | |
* | |
WORKING-STORAGE SECTION. | |
01 OUT01-INIT PIC X(51). | |
01 OUT01-R. | |
COPY TESTCPY. | |
03 LF PIC X(01). | |
* | |
01 FILLER. | |
10 WK-PACK PIC 9(4) comp-3. | |
10 WK-STR PIC X(1). | |
* | |
PROCEDURE DIVISION. | |
MAIN-RTN. | |
PERFORM INITIAL-RTN. | |
PERFORM EDIT1-RTN. | |
WRITE OUT01-REC FROM OUT01-R. | |
PERFORM EDIT2-RTN. | |
WRITE OUT01-REC FROM OUT01-R. | |
PERFORM EDIT3-RTN. | |
WRITE OUT01-REC FROM OUT01-R. | |
PERFORM END-RTN. | |
MOVE 0 TO RETURN-CODE. | |
EXIT. | |
STOP RUN. | |
* | |
INITIAL-RTN SECTION. | |
OPEN OUTPUT OUT01. | |
* 固定長行順ファイルのフォーマット | |
INITIALIZE OUT01-R. | |
MOVE X'0A' TO LF OF OUT01-R. | |
MOVE OUT01-R TO OUT01-INIT. | |
EXIT. | |
* | |
END-RTN SECTION. | |
CLOSE OUT01. | |
EXIT. | |
* | |
EDIT1-RTN SECTION. | |
MOVE OUT01-INIT TO OUT01-R. | |
MOVE 1 TO FILEID. | |
MOVE 'HOGE' TO NAME. | |
MOVE 123456 TO PRICE. | |
MOVE '20130621' TO TAGS. | |
EXIT. | |
* | |
EDIT2-RTN SECTION. | |
MOVE OUT01-INIT TO OUT01-R. | |
MOVE 2 TO FILEID. | |
MOVE 'FUGA' TO NAME. | |
MOVE -123456 TO PRICE. | |
MOVE '20130622' TO TAGS. | |
* | |
EDIT3-RTN SECTION. | |
MOVE OUT01-INIT TO OUT01-R. | |
MOVE 3 TO FILEID. | |
MOVE 'FOO' TO NAME. | |
MOVE 123 TO PRICE. | |
MOVE '20130622' TO TAGS. | |
EXIT. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
S9 COMP-3のテンプレートはもしかしてHじゃないかも?