Welcome 微信登录

首页 / 操作系统 / Linux / Linux Bash awk 提取文件

在一个文件A.txt中找用到图片的名称(SOURCE_FILE ),见下文!然后按照NAV_PROG_DETAIL_FRAME.png这样的文件名在另外一个文件夹下找相应的图片,找到后把这个图片Copy到一个新的文件夹下。挺没意思的,但是再一看,好几百文件啊,这么一个一个复制到啥时候啊!!!于是我就琢磨用个脚本来实现![FILE=NAV_IMG]
PATH   = ".. av_img_8888.i"
FORMAT = "C"[IMAGE_CONFIG = t_g_nav_frame_bk_bmp]
CONFIG_VARIABLE_NAME = "t_g_nav_frame_bk_bmp"
IMPLEMENT_FILE        = "NAV_IMG"
SOURCE_FILE           = "NAV_PROG_DETAIL_FRAME.png"MSG_REPORT            = 0
COMPRESSED = 1[IMAGE_CONFIG = t_g_nav_hlt_bar_bmp]
CONFIG_VARIABLE_NAME = "t_g_nav_hlt_bar_bmp"
IMPLEMENT_FILE        = "NAV_IMG"
SOURCE_FILE           = "NAV_CH_LST_HT.bmp"COMPRESSED = 1
、、、、、、首先我想用脚本把A.txt中用到的所有图片名都筛选出来,这样我选择了AWK来实现,由于当时不熟悉就分了三步:一、 $ awk "/SOURCE_FILE /{print}" A.txt 解释:显示文本文件A.txt 匹配(含有)字符串"SOURCE_FILE"的所有行
结果:SOURCE_FILE            = "NAV_PROG_DETAIL_FRAME.png"
SOURCE_FILE           = "NAV_CH_FRAME.png"
SOURCE_FILE           = "NAV_CH_LST_HT.bmp"
、、、、、、高兴啊,终于把图片名字搞出来了。不过我现在只需要NAV_PROG_DETAIL_FRAME.png这样的名字而已,然后我又学习AWK,发现可以用 :$ awk   "{print $3 }" A.txt   可以把"NAV_PROG_DETAIL_FRAME.png"提取出来,这里边$3表示域的意思。还多出了一些引号,因此我就着手把引号去掉,学习了半天,找到了一个方法 $ awk -F "[ " " ]" "{print $2}"    A.txt 可以提取引号中的内容,这里边大功臣可是 "[ " " ]" 这个啊,放括弧里边的正是两个引号!   " 肯定是匹配引号呗!结果:NAV_PROG_DETAIL_FRAME.png
NAV_CH_FRAME.png
NAV_CH_LST_HT.bmp
、、、、、、上边的输出结果都是在终端下打印出来的,能不能定向到一个文件中呢?是可以的!$ awk "/SOURCE_FILE /{print}" A.txt   >txt1.txt$ awk   "{print $3 }" txt1.txt   >txt2.txt$ awk -F "[ " " ]" "{print $2}"    txt2.txt   >txt3.txt好啦,接下来是不是要用这个txt3.txt来找到相应的图片呢?开始吧,我用bash编写脚本,命令:$ vi FILE 来创建一个名为:FILE的文档。假设我文件都放在 /opt/test/下,输入以下内容:###############################################################FILE_NAME:FILE#AUTHOR:chenfeng#EMAIL:chenfeng10000@126.com#######################################################!/bin/sh
clear
i=1
#j=NULLmkdir /opt/test/BMP
cd /opt/test#计算这个txt3里边共有多少行,刚才提取的图片名称在txt3中试一行一行存在的!别问我为什么,只能怪#awk太强大!
length=`awk "END{print NR}"   /opt/test/txt3.txt`
while (( $i <= $length ))#下来就是把txt3中一行一行的名字拿出来赋值给choice。
do
    choice=`awk "{if ( NR == $i ) print }" /opt/test/txt3.txt`
   # echo $choice
   # echo "$choice"
   # if ($choice != $j)
   # then
             cp /opt/test/Res/$choice ./BMP     #这句就是Copy文件啦
   # else
   # echo "No such file!"
   # fi
    i=`expr $i + 1`                                      #这句就是一行一行的增加
done
#############################################################编辑好后,给FILE加上可运行的权限 就可以了!$chmod +x FILE 或者$chmod -R 777 FILE然后 $ source FILE 就OK啦!查看Linux系统是否为64位的方法Linux Bash awk sed 处理文件相关资讯      Linux知识 
  • 时光总是太匆匆!Linux已经诞生23  (08/29/2014 14:12:03)
  • Linux虚拟文件系统之文件打开(sys  (02/14/2012 11:41:54)
  • 2012 年 Linux 峰会时间表  (02/14/2012 06:47:27)
  • 报告称当前 Linux 人才抢手 高薪也  (02/15/2012 06:35:56)
  • 解析企业为何选择Linux及其特别之  (02/14/2012 08:17:59)
  • Linux禁用字符闪烁的方法  (11/02/2011 10:28:25)
本文评论 查看全部评论 (0)
表情: 姓名: 字数