清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
由于excel中的vlookup函数的效率实在是太低了,哥们我做数据处理的,忍受不了了。 所以自己用脚本开发一个类似的功能。 代码如下: vlookup.sh内容 #!/bin/csh if [ $# -lt 4 ]; then echo "argument size < 4" echo "USEAGE sh vlookup.sh source.csv pattern.csv pattern_col output_col default_value" exit 0 fi SOURCE_FILE=$1 PATTERN_FILE=$2 PATTERN_INDEX=$3 INSERT_INDEX=$4 DEFAULT_VALUE=$5 awk -v PATTERN_FILE=${PATTERN_FILE} -v PATTERN_INDEX=${PATTERN_INDEX} -v INSERT_INDEX=${INSERT_INDEX} -v DEFAULT_VALUE=${DEFAULT_VALUE} -F ',' -f vlookup.awk ${SOURCE_FILE} vlookup.awk文件内容: #!/bin/awk -f # 模仿excel中的vlookup函数的功能 # awk -v PATTERN_FILE=${PATTERN_FILE} -v PATTERN_INDEX=${PATTERN_INDEX} -v INSERT_INDEX=${INSERT_INDEX} -f vlookup.awk ${SOURCE_FILE} # 初始化 BEGIN{ # 加载匹配文件 while(getline < PATTERN_FILE){ len=split($0 , pattern , ",") ; matcher = pattern[2] ; gsub(/\r/, "" , matcher) ; map[pattern[1]] = matcher ; } close(PATTERN_FILE) ; } # 行处理 { # 空行不进行处理 if(NF == 0){ next; } # 不处理第一行 if(NR == 1){ next ; } format = "" ; for(i = 1 ; i <= NF + 1 ; i ++){ # 匹配到的行 if(i == INSERT_INDEX){ if($(PATTERN_INDEX) in map){ format = format "" (map[$(PATTERN_INDEX)] "" ",") ; }else{ format = format "" DEFAULT_VALUE "" ","; } }else{ if(i < INSERT_INDEX){ # 直接输出的行 gsub(/\r/, "", $i) ; format = format "" ($i "" ",") ; }else{ # 匹配的行的右边的列都向右移动 gsub(/\r/, "", $(i-1)) ; format = format "" ($(i-1) "" ",") ; } } } printf("%s\n" , substr(format , 1 , length(format) - 1)) ; } #后处理 { } 示例: sh vlookup.sh area.csv pattern.csv 1 2 default_value area.csv内容如下: bianhongfei,10,hahaha,hahahah bianhongfei,11,hahaha,hahahah bianhongfei,12,hahaha,hahahah bianhongfei,13,hahaha,hahahah bianhongfei,14,hahaha,hahahah bianhongfei,15,hahaha,hahahah bianhongfei,16,hahaha,hahahah bianhongfei,17,hahaha,hahahah bianhongfei,18,hahaha,hahahah bianhongfei,19,hahaha,hahahah bianhongfei,20,hahaha,hahahah bianhongfei,21,hahaha,hahahah bianhongfei,22,hahaha,hahahah bianhongfei,23,hahaha,hahahah bianhongfei,24,hahaha,hahahah bianhongfei,25,hahaha,hahahah bianhongfei,26,hahaha,hahahah bianhongfei,27,hahaha,hahahah bianhongfei,28,hahaha,hahahah bianhongfei,29,hahaha,hahahah bianhongfei,30,hahaha,hahahah bianhongfei,31,hahaha,hahahah bianhongfei,32,hahaha,hahahah bianhongfei,33,hahaha,hahahah bianhongfei,34,hahaha,hahahah bianhongfei,35,hahaha,hahahah bianhongfei,36,hahaha,hahahah bianhongfei,37,hahaha,hahahah bianhongfei,38,hahaha,hahahah bianhongfei,39,hahaha,hahahah bianhongfei,40,hahaha,hahahah bianhongfei,41,hahaha,hahahah bianhongfei,42,hahaha,hahahah pattern.csv的内容如下: 10,北京市 11,天津市 12,河北省 13,山西省 14,内蒙古自治区 15,辽宁省 16,吉林省 17,黑龙江省 18,上海市 19,江苏省 20,浙江省 21,安徽省 22,福建省 23,江西省 24,山东省 25,河南省 26,湖北省 27,湖南省 28,广东省 29,广西壮族自治区 30,海南省 31,重庆市 32,四川省 33,贵州省 34,云南省 35,西藏自治区 36,陕西省 37,甘肃省 38,青海省 39,宁夏回族自治区 40,新疆维吾尔自治区 41,港澳地区 参数:1,匹配第一列,2,输出在第二列 最终输出: 10,北京市,hahaha,hahahah 11,天津市,hahaha,hahahah 12,河北省,hahaha,hahahah 13,山西省,hahaha,hahahah 14,内蒙古自治区,hahaha,hahahah 15,辽宁省,hahaha,hahahah 16,吉林省,hahaha,hahahah 17,黑龙江省,hahaha,hahahah 18,上海市,hahaha,hahahah 19,江苏省,hahaha,hahahah 20,浙江省,hahaha,hahahah 21,安徽省,hahaha,hahahah 22,福建省,hahaha,hahahah 23,江西省,hahaha,hahahah 24,山东省,hahaha,hahahah 25,河南省,hahaha,hahahah 26,湖北省,hahaha,hahahah 27,湖南省,hahaha,hahahah 28,广东省,hahaha,hahahah 29,广西壮族自治区,hahaha,hahahah 30,海南省,hahaha,hahahah 31,重庆市,hahaha,hahahah 32,四川省,hahaha,hahahah 33,贵州省,hahaha,hahahah 34,云南省,hahaha,hahahah 35,西藏自治区,hahaha,hahahah 36,陕西省,hahaha,hahahah 37,甘肃省,hahaha,hahahah 38,青海省,hahaha,hahahah 39,宁夏回族自治区,hahaha,hahahah 40,新疆维吾尔自治区,hahaha,hahahah 41,港澳地区,hahaha,hahahah 42,default,hahaha,hahahah