使用awk巧妙获取规则文件里的有用信息
2014-10-14 18:28
155 查看
如有一个文件,如下 module.h
/* Module naming conventions:
three characters prefix, plus zero or one surfix
prefix:
f file management related
o Oracle or O.S.
d data related
x expression (data standard)
z DSG invented zip, or free for commercial use zip method
surfix:
c client version of the module
r research version of the module
d deamon program
Module coding conventions:
first digit module level, 1 .. 7
second digit 7 : Oracle specific
*/
/******************************************************************************
* Module Definitions *
******************************************************************************/
#define MODULE_CFG 1 /* basic frame (STP & MSG) */
#define MODULE_ECD 2 /* encode */
#define MODULE_HSH 3 /* hash */
#define MODULE_LZM 4 /* LZ77 compress */
#define MODULE_OTS 6 /* Oracle table structure */
#define MODULE_STR 7 /* string */
#define MODULE_DIM 9 /* base data index management */
#define MODULE_DBK 10 /* like BerkeleyDB kernel */
#define MODULE_LZX 15 /* LZO real-time data compress */
#define MODULE_LZ4 16 /* LZ4 compress */
#define MODULE_FLZ 17 /* fastLZ compress */
#define MODULE_BID 20 /* block id manager */
#define MODULE_DDB 25 /* delete duplicate blocks */
#define MODULE_ODT 30 /* Oracle data type converter */
#define MODULE_ONL 40 /* Oracle National Language support */
#define MODULE_OCIW 41 /* Oracle Call Interface wrapper*/
#define MODULE_LOG 50 /* log print */
#define MODULE_DMM 60 /* dynamic memory manager */
#define MODULE_LPM 70 /* loop list manager */
#define MODULE_ZIN 100 /* zip (integer) */
#define MODULE_ZIS 101 /* zip (integer-section) */
#define MODULE_ZIP 110 /* zip (research) */
#define MODULE_ZHM 120 /* zip (huffman) */
#define MODULE_ZPK 130 /* zip (PKZIP compatible) */
#define MODULE_ZXD 140 /* zip (zip for XDT) */
#define MODULE_ZRM 150 /* zip (rowmap) */
需要提取出所有模块名,把模块名连成字符串, "cfg ecd hsh lzm ..."
awk解决方法:
awk -F'_' '/define/{print $2}' module.h | awk '/\/\*/{print tolower($1)}'
剖析:
module.h 表文件路径名
-F 是指定分割符的标志。
'_' 是分隔符 _ 需要加上‘ ’号。
/define/ 是表示出现某关键字的行,本例中关键字是define,把带有define的行抓取出来。
{printf $2} 是打印以 ‘_’ 分开的第二项,如:" CFG 1 /* basic frame (STP & MSG) */ "
| 是管道输入
'\/\* 是转译字符,表 ’ /* ‘ ,就是提取带有 ‘ /* ’ 的行
tolower($1) 大写转小写
最后的输出结果是:
cfg
ecd
hsh
lzm
ots
str
dim
dbk
lzx
lz4
flz
bid
ddb
odt
onl
ociw
log
dmm
lpm
zin
zis
zip
zhm
zpk
zxd
zrm
/* Module naming conventions:
three characters prefix, plus zero or one surfix
prefix:
f file management related
o Oracle or O.S.
d data related
x expression (data standard)
z DSG invented zip, or free for commercial use zip method
surfix:
c client version of the module
r research version of the module
d deamon program
Module coding conventions:
first digit module level, 1 .. 7
second digit 7 : Oracle specific
*/
/******************************************************************************
* Module Definitions *
******************************************************************************/
#define MODULE_CFG 1 /* basic frame (STP & MSG) */
#define MODULE_ECD 2 /* encode */
#define MODULE_HSH 3 /* hash */
#define MODULE_LZM 4 /* LZ77 compress */
#define MODULE_OTS 6 /* Oracle table structure */
#define MODULE_STR 7 /* string */
#define MODULE_DIM 9 /* base data index management */
#define MODULE_DBK 10 /* like BerkeleyDB kernel */
#define MODULE_LZX 15 /* LZO real-time data compress */
#define MODULE_LZ4 16 /* LZ4 compress */
#define MODULE_FLZ 17 /* fastLZ compress */
#define MODULE_BID 20 /* block id manager */
#define MODULE_DDB 25 /* delete duplicate blocks */
#define MODULE_ODT 30 /* Oracle data type converter */
#define MODULE_ONL 40 /* Oracle National Language support */
#define MODULE_OCIW 41 /* Oracle Call Interface wrapper*/
#define MODULE_LOG 50 /* log print */
#define MODULE_DMM 60 /* dynamic memory manager */
#define MODULE_LPM 70 /* loop list manager */
#define MODULE_ZIN 100 /* zip (integer) */
#define MODULE_ZIS 101 /* zip (integer-section) */
#define MODULE_ZIP 110 /* zip (research) */
#define MODULE_ZHM 120 /* zip (huffman) */
#define MODULE_ZPK 130 /* zip (PKZIP compatible) */
#define MODULE_ZXD 140 /* zip (zip for XDT) */
#define MODULE_ZRM 150 /* zip (rowmap) */
需要提取出所有模块名,把模块名连成字符串, "cfg ecd hsh lzm ..."
awk解决方法:
awk -F'_' '/define/{print $2}' module.h | awk '/\/\*/{print tolower($1)}'
剖析:
module.h 表文件路径名
-F 是指定分割符的标志。
'_' 是分隔符 _ 需要加上‘ ’号。
/define/ 是表示出现某关键字的行,本例中关键字是define,把带有define的行抓取出来。
{printf $2} 是打印以 ‘_’ 分开的第二项,如:" CFG 1 /* basic frame (STP & MSG) */ "
| 是管道输入
'\/\* 是转译字符,表 ’ /* ‘ ,就是提取带有 ‘ /* ’ 的行
tolower($1) 大写转小写
最后的输出结果是:
cfg
ecd
hsh
lzm
ots
str
dim
dbk
lzx
lz4
flz
bid
ddb
odt
onl
ociw
log
dmm
lpm
zin
zis
zip
zhm
zpk
zxd
zrm
相关文章推荐
- 本文使用c#通过oledb可获取excel文件表的结构信息,同理也可以获得access等数据库的表结构信息,实现如下:
- Qt学习笔记,使用QDir获取当前目录下所有目录和文件信息
- 使用 lstat 函数获取文件信息
- awk应用-获取文件的信息(三)
- 又拍云常见使用问题(如何获取图片类空间的文件信息)
- 使用MPlayer获取文件信息
- Spring配置文件中使用PropertyPlaceholderConfigurer配置获取jdbc的配置信息
- 使用ServletFileUpload 实现文件上传 和获取文件信息
- 使用ShellClass获取文件属性详细信息的实现方法
- awk应用-获取文件的信息(二)
- 使用stat函数获取文件基本信息
- Java 通过使用File类获取文件信息
- 上传excel文件 并获取其信息(使用file上传组件)
- php中使用getimagesize获取图片、flash等文件的尺寸信息实例
- 在Autodesk Vault 2014中使用VDF(Vault Development Framework) API获取所有文件的属性信息
- Qt学习笔记,使用QDir获取当前目录下所有目录和文件信息
- 使用ShellClass获取文件属性详细信息
- 使用ShellClass获取文件属性详细信息
- 只使用awk去除配置文件的注释等无效信息
- php中使用getimagesize获取图片、flash等文件的尺寸信息实例