sed 、awk 项目中的shell脚本使用

需求:把查询中的相关进程名称改成中文,并不修改源文件内容
源文件:
[root@localhost scripts]# cat en_source.txt
system               [ OK ]
Monitor              [ OK ]
Location            [ OK ]
Apple                 [ OK ]
orange               [ NO ]
Automatic         [ OK ]
[root@localhost scripts]#
最后实现的结果
[root@localhost scripts]# sh en_ch.sh
系统                [ 正确 ]
监控                [ 正确 ]
定位                [ 正确 ]
苹果                [ 正确 ]
橙子                [ 错误 ]
自动测试        [ 正确 ]
[root@localhost scripts]#

模拟创建项目中相应的文件

文件模拟的是查看进程状态生产的文件/servers/scripts/en_source.txt  

进程中文意思的文件:/servers/scripts/ch_file.txt

[root@localhost scripts]# cat ch_file.txt
系统
监控
定位
苹果
橙子
自动测试
 

脚本实现;

相关知识:awk 的条件判断,取列;awk 显示行号awk '{print NF}' 文件名;

sed 替换 sed -i -r "s###g" 

文件是否存在判断 [ -f  ${SourcesFile} -a ${CHINA} ] || echo "${SourcesFile} or ${CHINA} file does not exist!"

shell 语言for循环语句 实现sed 的循环替换
for n in $(awk '{print NR}' ${FileStatus})
do
 CPART="${n}s#(.*)#`sed -n ${n}p ${CHINA}`        `sed -n ${n}p ${FileStatus}` #g"
 sed  -i -r "${CPART}" ${ATSPATH}
done
shell 脚本:

[root@localhost scripts]# cat en_ch.sh
#!/bin/bash

#定义的文件所在路径变量
SourceFile=/servers/scripts/en_source.txt
CHINA=/servers/scripts/ch_file.txt
FileStatus=/servers/scripts/file_status.txt
ATSPATH=/servers/scripts/Atsflie.txt

#判断文件是否存在;不存在给出提示
[ -f  ${SourcesFile} -a ${CHINA} ] || echo "${SourcesFile} or ${CHINA} file does not exist!"

#连续执行命令
cat ${SourceFile}>${ATSPATH} && \
awk '{if($3 == "NO"){$3="错误"}else if($3 == "OK"){$3="正确"} print $2,$3,$4}' ${SourceFile}>${FileStatus}
for n in $(awk '{print NR}' ${FileStatus})
do
 CPART="${n}s#(.*)#`sed -n ${n}p ${CHINA}`        `sed -n ${n}p ${FileStatus}` #g"
 sed  -i -r "${CPART}" ${ATSPATH}
done
cat ${ATSPATH}

猜你喜欢

转载自blog.csdn.net/LINU_BW/article/details/84872818