有人可以告诉我如何使用bash脚本获取此输出吗?
输入1:
xyzaa97
xyzaa98
xyzaa99
输出:
xyzaa100
输入2:
abc01
abc02
输出:
abc03
答案 0 :(得分:4)
使用bash:
# get last line of file
name=$(tail -n 1 file)
# split $name in two parts with regex to array BASH_REMATCH
if [[ $name =~ ([a-z]+0*)([0-9]+) ]]; then
# increase right part, option -i to set integer flag
declare -i num=${BASH_REMATCH[2]}+1
# join again both parts together
echo "${BASH_REMATCH[1]}$num"
fi
使用此文件:
abc01 abc02
输出:
abc03
答案 1 :(得分:2)
好的,看到你的声明获得索引我完全误解了你的要求,所以这就是awk中的内容,请告诉我这是否对你有帮助。
awk 'END{val=$0;sub(/[a-zA-Z]+/,"",val);val++;sub(/[0-9]+/,val);print}' Input_file
OR
awk 'END{val=$0;sub(/[a-zA-Z]+/,"",val);sub(/[0-9]+/,++val);print}' Input_file
编辑:我之前尝试过匹配。
awk 'END{match($0,/.[^0-9]*/);print substr($0,RSTART,RLENGTH) substr($0,RLENGTH+1)+1}' Input_file
答案 2 :(得分:2)
gawk
使用match()
awk 'END{match($0,/([A-Za-z])([0-9]+)$/,a); sub(a[2],sprintf("%02d",a[2]+1),$1); print $1}' infile
non-gawk
使用split()
awk 'END{split($1,a,/[^0-9]+/); sub(a[2],sprintf("%02d",a[2]+1),$1); print $1}' infile
# OR
awk 'END{t=$1;sub(/[^0-9]+/,"",t);sub(/[0-9]+/,sprintf("%02d",t+1),$1); print $1}' infile
测试结果:
$ cat f
xyzaa97
xyzaa98
xyzaa99
$ awk 'END{split($1,a,/[^0-9]+/); sub(a[2],sprintf("%02d",a[2]+1),$1); print $1}' f
xyzaa100
$ cat f1
abc01
abc02
$ awk 'END{split($1,a,/[^0-9]+/); sub(a[2],sprintf("%02d",a[2]+1),$1); print $1}' f1
abc03