У меня есть требование разделить файл по сегментам. Мне нужно разделить файлы на основе сегмента CLP в файле. Заголовок и трейлер одинаковы для всех файлов, и мне нужно увеличить значение заголовка и трейлера, начиная со второго файла. Прикрепленный файл примера и выходные файлы. (). Я разработал приведенный ниже код и придерживался раздела приращения. В моем коде я назначил значение заголовка (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.