⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trans.sh

📁 一个awk和bsh混合编程的例子
💻 SH
字号:
#!/usr/bin/kshREPORT_FILE_NAME=REP6_716_20080625092336_1ATTRIBUTES="lcasControl:userlabel:sTPGblName:aaa:etId:bbb:implSt"REPORT_ID=19Attr_Names="userlabel etId implSt"Attr_Types="userlabel:STR etId:INT implSt:ENUM"#Assemble_start="{"#Assemble_end="}"#Field_sep=":"#Esc_sep="\\"SEP_CONF=Seperator.cfg;parseSepConf(){	if [ -f $SEP_CONF ];then	{		Assemble_start=`awk '{			if ($0 ~ /^ *\t* *#.*/ ){			}			else if ($0 ~/ *\t* *$/){			}			else if ($1 ~/^NESTING_INDICATOR_OPEN/ ){				printf "%s\n",$3			}		}' $SEP_CONF`;		if [ -z "$Assemble_start" ];then			echo "ERROR:NESTING_INDICATOR_OPEN is not defined";			exit 1;		fi				Assemble_end=`awk '{			if ($0 ~ /^ *\t* *#.*/ ){			}			else if ($0 ~/ *\t* *$/){			}			else if ($1 ~/^NESTING_INDICATOR_CLOSE/ ){				printf "%s\n",$3			}		}' $SEP_CONF`;		if [ -z "$Assemble_end" ]; then			echo "ERROR:NESTING_INDICATOR_CLOSE is not defined";			exit 1;		fi				Field_sep=`awk '{			if ($0 ~ /^ *\t* *#.*/ ){			}			else if ($0 ~/ *\t* *$/){			}			else if ($1 ~/^ATTRIBUTE_SEPARATOR_INDICATOR/ ){				printf "%s\n",$3			}		}' $SEP_CONF`;		if [ -z "$Field_sep" ];then			echo "ERROR:ATTRIBUTE_SEPARATOR_INDICATOR is not defined";			exit 1;		fi				Esc_sep=`awk '{			if ($0 ~ /^ *\t* *#.*/ ){			}			else if ($0 ~/ *\t* *$/){			}			else if ($1 ~/^ESCAPE_INDICATOR/ ){				printf "%s\n",$3;			}		}' $SEP_CONF`;		if [ -z "$Esc_sep" ]; then			echo "ERROR:ESCAPE_INDICATOR is not defined";			exit 1;		fi	}	else	{		echo "ERROR: $SEP_CONF not exist";		exit 1;	}	fi}transferReport(){	if [ -f "$REPORT_FILE_NAME" ]; then	{			OLD_REPORT_FILE=$REPORT_FILE_NAME.rt;		mv $REPORT_FILE_NAME $OLD_REPORT_FILE;		awk -F"$Field_sep" '{			req_attr_num=extractAttrs(required_attrs, req_attrs, ":");						split(additional_type, add_types, " ")			for (z in add_types)			{				zz=index(add_types[z], ":");				name=substr(add_types[z], 1, zz-1);				value=substr(add_types[z], zz+1);				attr_types[name]=value;			}						if ($0 ~ /^#.*/ )			{				printf "%s\n", $0;			}			else if ($0 ~ /^!RECORD_DESCRIPTION=\{.*/ )			{				pos_front=index($0, asm_begin);				pos_back=index($0, asm_end);				len=pos_back - pos_front-1;				old_attrstring=substr($0, pos_front+1, len);				old_attrs_num=extractAttrs(old_attrstring, old_attrs, fld_sep);								printf "!RECORD_DESCRIPTION=%s",asm_begin;				first_attr_printed=0;				for (x=1;x<=req_attr_num;x+=1)				{					found=0;					for(y=1;y<=old_attrs_num;y+=1)					{						if (req_attrs[x]==old_attrs[y])						{							found=1;							req_old_map[x]=y;							if (x!=1){								printf fld_sep;							}							printf req_attrs[x];							first_attr_printed=1;						}					}					if (found==0)					{						req_old_map[x]=0;						if (length(attr_types[req_attrs[x]])!=0)						{							if (x!=1 && first_attr_printed!=0){								printf fld_sep;							}							printf req_attrs[x];							first_attr_printed=1;						}					}				}				printf "%s\n",asm_end;			}			else if ($0 ~ /^!.*/ )			{				printf "%s\n", $0;			}			else			{				real_fld_ix=0;				for (fld_ix=1;fld_ix<=NF;)				{					real_fld_ix+=1;					if (substr($fld_ix,1,1)==asm_begin)					{						fld_tmp="";						for(;fld_ix<=NF;fld_ix+=1)						{							if (substr($fld_ix,length($fld_ix),1)==asm_end &&length($fld_ix)==1 || 								substr($fld_ix,length($fld_ix),1)==asm_end &&length($fld_ix)>1 && substr($fld_ix,length($fld_ix)-1,1)!=esc_ch)							{								if (fld_tmp!=""){									fld_tmp=fld_tmp""fld_sep""$fld_ix;								}								else{									fld_tmp=$fld_ix;								}								real_fld[real_fld_ix]=fld_tmp;								break;							}							else							{								if (fld_tmp!=""){									fld_tmp=fld_tmp""fld_sep""$fld_ix;								}								else{									fld_tmp=$fld_ix;								}							}						}						fld_ix+=1;					}					else					{						real_fld[real_fld_ix]=$fld_ix;						fld_ix+=1;					}				}								first_attr_printed=0;				for (xx=1;xx<=req_attr_num;xx+=1)				{					if (req_old_map[xx]!=0)					{						if (xx!=1){							printf fld_sep;						}						printf real_fld[req_old_map[xx]];						first_attr_printed=1;					}					else if (length(attr_types[req_attrs[xx]])!=0)					{						type_real=attr_types[req_attrs[xx]];						if (type_real=="INT")						{							if (xx!=1 && first_attr_printed!=0){								printf fld_sep;							}							printf "-1";							first_attr_printed=1;						}						else if (type_real=="STR" || type_real=="ENUM")						{							if (xx!=1 && first_attr_printed!=0){								printf fld_sep;							}							printf "NotMeaningful";							first_attr_printed=1;						}					}				}				printf "\n";			}			}		function extractAttrs(in_string,array,seperator) {			ix=1;			attrs_string_tmp=in_string;			pos_sep_req=index(attrs_string_tmp,seperator);			while (pos_sep_req != 0 && length(attrs_string_tmp) !=0)			{				attr_str=substr(attrs_string_tmp,1,pos_sep_req-1);				array[ix]=attr_str;				ix+=1;				attrs_string_tmp=substr(attrs_string_tmp,pos_sep_req+1);				pos_sep_req=index(attrs_string_tmp,seperator);			}			if (length(attrs_string_tmp) !=0)			{				attr_str=substr(attrs_string_tmp,1);				array[ix]=attr_str;			}			else			{				ix-=1;			}			return ix;		}		' required_attrs="$ATTRIBUTES" additional_type="$Attr_Types" asm_begin="$Assemble_start" asm_end="$Assemble_end" fld_sep="$Field_sep" esc_ch="$Esc_sep" $OLD_REPORT_FILE >$REPORT_FILE_NAME;	}	else	{		echo "ERROR: $REPORT_FILE_NAME not exist";		exit 1;	}	fi}parseSepConf;echo $Assemble_startecho $Assemble_endecho $Field_sepecho $Esc_septransferReport;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -