使用awk巧妙获取规则文件里的有用信息

如有一个文件,如下 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值