Увеличивать значение столбца каждый раз в файле - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть требование разделить файл по сегментам. Мне нужно разделить файлы на основе сегмента CLP в файле. Заголовок и трейлер одинаковы для всех файлов, и мне нужно увеличить значение заголовка и трейлера, начиная со второго файла. Прикрепленный файл примера и выходные файлы. (enter image description here). Я разработал приведенный ниже код и придерживался раздела приращения. В моем коде я назначил значение заголовка (LINE1 и LINE2) и значение трейлера (TRAILER) соответственно. Как увеличить заголовок и значение трейлера внутри al oop.

Код: -

        if [[ $# -lt 1 ]] ; then
        echo "Usage: $(basename $0) File2Split [MaxLines]" >&2
        exit 1
        fi

        FileName="$1"

        if [[ ! -r $FileName ]] ; then
                echo "ERROR: could not read $FileName" >&2
                exit 1
        fi

        MAXCLP="$2"

        if [[ -z "${MAXCLP}" ]] ; then
                echo "INFO: no value for MAXCLP'S. Setting it to 100." >&2
                MAXCLP=100
        fi

        echo "File name  = ${FileName} "
        echo "No of CLPs = ${MAXCLP} "

        #take a back up of file
        echo "$(date +'%m/%d/%Y %H:%M:%S:%3N') : Creating a backup..."
        cp -v $FileName ${FileName}_backup

        #Format the file with separated lines
        echo "$(date +'%m/%d/%Y %H:%M:%S:%3N') : Separating by line..."
        LineSeparator="$(head -q -n 1 "$FileName" | cut -c106)"
        sed -i -r -e "s#${LineSeparator}([^\n])#${LineSeparator}\n\1#g" -e "s/^[ \t]*//" "$FileName"

        #Initialize variables
        SAVEIFS=$IFS
        Cnt=0;
        FileNum=1;
        #Get all lines with CLP segment and their corresponding line numbers
        LINES="$(cat $FileName | grep -n ^CLP | awk "NR % $MAXCLP == 0" )"
        LINE1="$(head -n 1 "$FileName")
        LINE2="$(head -n 2 "$FileName" | tail -1 )
        TRAILER="$(tail -n 2 "$FileName")
        MID="$(sed -n '3,/CLP/p' "$FileName" | head -n -1)
        StartLine=1;
        EndLine="$";
        CurrentLine=1;
        for LN in $LINES ; do
                CurrentLine=$(echo ${LN} | cut -d':' -f1);
                EndLine=$(($CurrentLine-1));
                sed -n "${LINE1},${LINE2},${MID},${StartLine},${EndLine},${TRAILER}p" $FileName > "${FileName}_${FileNum}";

        --- increment section comes here----

                StartLine=$CurrentLine;
                EndLine="$";
                ((FileNum++));

                Cnt=1;
        done

         *************************************************************
         Input File Details:-
         ISA*00**200402*0131*^*00501*000000234*1*P*|~
         GS*HC*580977458*12345678*20200402*013121*000000001*X*00903943AX2~
         TS*837*000000004*09345454DERTD~
         TBH*0019*00*600920001*20200401*070634*CH~
         ND*2001630~
         XR**COUNTY*****PI*9353~
         RT*PO BO6~
         CVD*TWIN *ID*83303~
         CLP*XXXXXX***HANDICAP**A*Y*Y~
         PTD*VVVV*ASX*1000~
         PTD*434*RD8*~
         PTD*435*DT*~
         CL1*3*1*01~
         FER*D9*CDSKSLS~
         FER*EA*AAAAAA~
         CLP*XXXXXX***HANDICAP**A*Y*Y~
         PTD*VVVV*ASX*1000~
         PTD*434*RD8*~
         PTD*435*DT*~
         CL1*3*1*01~
         FER*D9*CDSKSLS~
         FER*EA*AAAAAA~
         CLP*XXXXXX***HANDICAP**A*Y*Y~
         PTD*VVVV*ASX*1000~
         PTD*434*RD8*~
         PTD*435*DT*~
         CL1*3*1*01~
         FER*D9*CDSKSLS~
         FER*EA*AAAAAA~
         GE*211*000000001~
         IEA*1*000000001~

         Out Put File 1:-
         ISA*00**200402*0131*^*00501*000000235*1*P*|~
         GS*HC*580977458*12345678*20200402*013121*000000002*X*00903943AX2~
         TS*837*000000004*09345454DERTD~
         TBH*0019*00*600920001*20200401*070634*CH~
         ND*2001630~
         XR**COUNTY*****PI*9353~
         RT*PO BO6~
         CVD*TWIN *ID*83303~
         CLP*XXXXXX***HANDICAP**A*Y*Y~
         PTD*VVVV*ASX*1000~
         PTD*434*RD8*~
         PTD*435*DT*~
         CL1*3*1*01~
         FER*D9*CDSKSLS~
         FER*EA*AAAAAA~
         GE*211*000000002~
         IEA*1*000000002~

        Note:-In the output file ISA segment value 000000235, GS segment 
        value 000000002 , IEA and GE segent value 000000002 got incremented 
        by 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...