实现功能:
H:\MySpace\PluginConfig
转换为:
/h/MySpace/PluginConfig
实现代码
#!/usr/bin/gawk -f
# bashpath
BEGIN{
#使用sed命令删除0至匹配到以Filesystem开头的所有行
DF = "df -P 2>/dev/null sed '0,/^Filesystem/d'"
#使用getline命令读取下一行内容,并赋给$0、NF、NR、FNR等内置变量(NR Number Of Record In File行号、只有一个文件处理时FNR同NR,若多个文件时NR累加,但FNR从1开始计数)
while ((DF getline) > 0){
#NF代表一行中的记录域个数,因此$(NF)代表最后一个域的字符串
if($(NF) == "/")
pathmap[$1 "/"] = $(NF)
else
pathmap[$1 "/"] = $(NF) "/"
}
close(DF)
pathmap["C:/"] = "/c/"
matched_path = ""
#在AWK中,ARGV代表命令行变元数组,即输入的第一个参数
input_path = ARGV[1]
#替换input_path中所有的\为/
gsub("\\\\", "/", input_path)
#如果input_path没有匹配到\结尾,则在input_path后面追加一个\(!~ 在正则表达式中表示not match . =~ 在正则表达式中表示match)
if (input_path !~ /\/$/)
input_path = input_path "/"
for (pathitem in pathmap){
#如果匹配到input_path以pathitem开头并且pathitem长度大于matched_path时
if ((input_path ~ "^" pathitem) && (length(pathitem)>length(matched_path))){
matched_path = pathitem
}
}
#替换input_path中第一个matched_path为pathmap[matched_path]
sub("^" matched_path, pathmap[matched_path], input_path)
#替换input_path中倒数第一个\为空格,即去除最后一个\
sub(/\/$/, "", input_path)
print input_path
}
扫扫加关注,
小Ⅴ帮带路!
领取专属 10元无门槛券
私享最新 技术干货