完成的功能:
有一个文件格式如下:
2401:b400:20::/48
2401:b400:21::/48
2001:250:4000::/48
2001:da8:8f00::/48
2001:250:3000::/48
使用空行分割成25部分,比如第一部分代表一个AS的前缀IP地址
另外一个文件:
BJ_Tsinghua
WuHan
GuangZhou
NanJing
一共25行,每一行对应文件1 中的一个部分,现在的需求是要在文件1中加入 这个前缀 达到效果如下:
2401:b400:20::/48 BJ_Tsinghua
2401:b400:21::/48 BJ_Tsinghua
2001:250:4000::/48 WuHan
2001:da8:8f00::/48 WuHan
2001:250:3000::/48 GuangZhou
我实现的方法是使用awk 的FS和RS。
首先使用RS=“” (以空行切分记录) 作为 读取记录的分隔符,那么awk 每次就会读入一个分块了,而不是默认的一行。FS 使用\n 这样就可以对读取的分块 按行划分。
代码如下所示:主要有两个参数,index 代表是第几个分块,prefix代表是相应的前缀;
ps: 我是越来越喜欢shell 脚本了。
function addPrefix(){
index=$1;
prefix=$2;
cat prefix.conf |awk -v pre=$prefix -v id=$index 'BEGIN{FS="\n";RS=""}(NR==id){for(i=1;i<=NF;i++){print $i"\t"pre}}'
}
i=1
while read line;
do
addPrefix $i $line
let i=i+1
echo -e "\n"
done < name.conf