AWK提取脚本 - 括号之间的文本 [英] awk script- extract text between parenthesis

查看:459
本文介绍了AWK提取脚本 - 括号之间的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我特林提取的第一个和它匹配的右括号在文件之间的文本。

输入

  CREATE TABLE MULTISET ABCD.EFGH,
没有回退,
NO BEFORE作者,
NO后作者,
CHECKSUM =默认
(ABCK_SK INTEGER NOT NULL,
PRQ VARCHAR(1024)NOT NULL,
RST DECIMAL(12,4)NOT NULL,
LMN CHAR(1)NOT NULL,
OPQ DATE NOT NULL,
PQRS DATE NOT NULL,
TUV INTEGER NOT NULL,
WXY INTEGER NOT NULL
)唯一的主索引ABCK_PI(ABCK_SK)
;

预计输出

  ABCK_SK INTEGER NOT NULL,
PRQ VARCHAR(1024)NOT NULL,
RST DECIMAL(12,4)NOT NULL,
LMN CHAR(1)NOT NULL,
OPQ DATE NOT NULL,
PQRS DATE NOT NULL,
TUV INTEGER NOT NULL,
WXY INTEGER NOT NULL

我写了下面的脚本获得从那里到文本需要被提取的行号和列号,但我不能够真正打印输出。任何suggetions将大大AP preciated。
谢谢

 #!/ bin / sh的
NAWK'BEGIN {startln = 0; J = 0; I = 0; endln = 0; startchr = 0; endchr = 0} {
I = 1;而(I< = NF){
如果($ I ==(与&&安培; startln == 0){startchr = I; startln = NR}
如果($ I ==)){当J = J-1}
如果($ I ==(){J = J + 1}
如果(J == 0){endchr = I; endln = NR;}突破
 I = I + 1}}
结束{
打印startln =startlnstartchr =startchrendln =endlnendchr =endchr}'$ 1


解决方案

一个Perl的解决方案:

 的perl -e'$ / = \\ 1;
    而(小于&GT){
        如果(/ \\)/){$ C - = 1;除非退出$ C}
        如果打印$ c取代; 0;
        $ C + = / \\(/
    }'输入文件

I am tring to extract text between the first and its matching closing bracket in a file.

Input

CREATE MULTISET TABLE ABCD.EFGH,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = Default
( ABCK_SK      INTEGER         NOT NULL,
PRQ  VARCHAR(1024)           NOT NULL,
RST   DECIMAL (12,4)          NOT NULL,
LMN     CHAR(1)         NOT NULL,
OPQ      DATE            NOT NULL,
PQRS     DATE            NOT NULL,
TUV       INTEGER         NOT NULL,
WXY        INTEGER         NOT NULL
)  UNIQUE PRIMARY INDEX ABCK_PI (ABCK_SK)
;

Expected Output

ABCK_SK      INTEGER         NOT NULL,
PRQ  VARCHAR(1024)           NOT NULL,
RST   DECIMAL (12,4)          NOT NULL,
LMN     CHAR(1)         NOT NULL,
OPQ      DATE            NOT NULL,
PQRS     DATE            NOT NULL,
TUV       INTEGER         NOT NULL,
WXY        INTEGER         NOT NULL

I have written the following script for getting the line number and column number from where to where the text needs to be extracted, but i not able to actually print the output. Any suggetions would be greatly appreciated. Thanks

#!/bin/sh
nawk 'BEGIN{startln=0;j=0;i=0;endln=0;startchr=0;endchr=0} {
i=1; while( i<=NF ) {
if($i=="(" && startln==0 ){startchr=i; startln=NR} 
if($i==")"){j=j-1} 
if($i=="("){j=j+1} 
if(j==0){endchr=i;endln=NR;break} 
 i=i+1}} 
END{
print "startln="startln " startchr="startchr " endln="endln " endchr="endchr}' $1

解决方案

A perl solution:

perl -e '$/=\1;
    while(<>) {
        if( /\)/ ) { $c -=1; exit unless $c }
        print if $c > 0;
        $c += /\(/
    }' input-file

这篇关于AWK提取脚本 - 括号之间的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆