歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux Bash awk 提取文件

Linux Bash awk 提取文件

日期:2017/2/28 16:32:50   编辑:Linux教程
在一個文件A.txt中找用到圖片的名稱(SOURCE_FILE ),見下文!然後按照NAV_PROG_DETAIL_FRAME.png這樣的文件名在另外一個文件夾下找相應的圖片,找到後把這個圖片Copy到一個新的文件夾下。挺沒意思的,但是再一看,好幾百文件啊,這麼一個一個復制到啥時候啊!!!於是我就琢磨用個腳本來實現!

[FILE=NAV_IMG]
PATH = "..\nav_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:[email protected]

######################################################

#!/bin/sh
clear
i=1
#j=NULL

mkdir /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啦!

Copyright © Linux教程網 All Rights Reserved