需求:解析一个特定格式的文件(这个文件可以成为一个配置文件),逐行读取,并打印出来。
方案:while实现读取,然后用awk进行读取相应的值。
第一步:用while读取文件。
while read file
do
…
…
…
done < config.txt
这里file是一个变量,代表读的那一行,shell是弱数据类型语言,所以file这个变量是字符串变量。
第二步:获取file变量中的值。(以空格为分割线进行处理)
a=`echo $file |awk '{print $0}'`
b=`echo $file |awk '{print $1}'`
c=`echo $file |awk '{print $2}'`
d=`echo $file |awk '{print $3}'`
e=`echo $file |awk '{print $4}'`
echo '++++++++++++++++++++++++++++'
echo a=$a
echo b=$b
echo c=$c
echo d=$d
echo e=$e
echo '++++++++++++++++++++++++++++'
这样我们就可以得到相应的变量值了。如:
<project ext="xiyouji" name="sunwukong" path="huaguoshan" />
打印结果为:
++++++++++++++++++++++++++++
a=<project ext="xiyouji" name="sunwukong" path="huaguoshan" />
b=<project
c=ext="xiyouji"
d=name="sunwukong"
e=path="huaguoshan"
f=/>
++++++++++++++++++++++++++++
可以看到,$0 代表了全部,12345分别对应了空格分开的字段
第三步:获取上面变量中的值
echo '============================='
ext=`echo $c |awk -F '"' '{print $2}'`
name=`echo $d |awk -F '"' '{print $2}'`
path=`echo $e |awk -F '"' '{print $2}'`
echo ext is:$ext
echo name is:$name
echo path is:$path
echo '============================='
打印结果为:
=============================
ext is:xiyouji
name is:sunwukong
path is:huaguoshan
=============================
原理同上
第四步:awk的详细解释。
https://www.cnblogs.com/xudong-bupt/p/3721210.html
总结:
awk中如果没有用-F指定特定的分割符号,默认是用空格进行分割,读者可以自行尝试修改config.txt的内容,用不同的分割符进行练习
完整代码:
#!/bin/bash
while read file
do
a=`echo $file |awk '{print $0}'`
b=`echo $file |awk '{print $1}'`
c=`echo $file |awk '{print $2}'`
d=`echo $file |awk '{print $3}'`
e=`echo $file |awk '{print $4}'`
echo '++++++++++++++++++++++++++++'
echo a=$a
echo b=$b
echo c=$c
echo d=$d
echo e=$e
echo '++++++++++++++++++++++++++++'
ext=`echo $c |awk -F '"' '{print $2}'`
name=`echo $d |awk -F '"' '{print $2}'`
path=`echo $e |awk -F '"' '{print $2}'`
echo '============================='
echo ext is:$ext
echo name is:$name
echo path is:$path
echo '============================='
done < config.txt
config.txt的内容为:
<project ext="xiyouji" name="sunwukong" path="huaguoshan" />