您的位置:首页 > 其它

使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: