如何在AWK中使用多个RS

问题描述 投票:0回答:1

感谢您的支持,我正在尝试从下面的日志示例中提取特定模式

    03/-1/NO, LIMIT: 1:1=MISSING LIMIT - RECORD##AA23100TLD89-SCHEDULE-12345678. 1/12. 02/-1/NO, PROPERTY: 1: 1=MISSING AA. PROPERTY -
RECORD*| *PH0010002 | NEW | LENDING-TAKEOVER-ARRANGEMENT | 12345678|1234567891: : 0013978397|JAO:: JAF|HL. DOA| PHP | 20150910 | ACCOUNT: : OFFICERS: : LIMIT: : COMMITMENT:: PRINCIPALINT: : SCHEDULE: : XIMS I ::::::::3333 TALT. ID! TACCOUNT. REFERENCE! !L.GL. BRANCH! !L.BDO. PROD: : PRIMARY.OFFICER:: LIMIT: : AMOUNT! !MATURITY. DATE:: PERIODIC. INDEX! ! PERIODIC. RATE! !MARGIN.TYPE! !MARGIN.OPER! !MARGIN. RATE !!ACCRUAL. RULE! !DAY. BASIS! ! PERIODIC. PERIOD. TYPE! ! PERIODIC. PERIOD! ! INITIAL. RESET. DATE!! PERIODIC.RESET:: PAYMENT. TYPE:1:1!! PAYMENT .METHOD: 1:1! | PAYMENT .FREQ:1:11 | PROPERTY: 1:1! !START. DA TE: 1:11 1END. DATE: 1:11 | PAYMENT. TYPE: 2:1! ! PAYMENT. METHOD: 2: 1! | PAYMENT. FREQ:2:1! ! PROPERTY: 2:1!! START. DATE: 2:1! | END. DATE: 2:1! !ACTUAL.AMT: 2:1! | PAYMENT.TYPE:3:11 !PAYMENT.METHOD: 3:1!! PAYM ENT. FREQ: 3:11! PROPERTY: 3:1! | PROPERTY: 3:2! !START. DATE: 3:1! ! ACTUAL.AMT: 3:1:: EFF. INT. RATE: 1:1! |APL. AMOUNT: 1:1! !BSP. EMPLOYEE-CODE: 1:1! ! DEDUCTION. TYPE: 1:11|APL.DISCOUNT .RATE: 1: 1! |HOUSE.

我想要如下所示的输出。

LIMIT: 1:1=MISSING LIMIT -
RECORD
PROPERTY: 1: 1=MISSING AA.
PROPERTY -
RECORD

我尝试使用 AWK,但它有助于获得一半的输出,无法使用多个 RS。

[root@localhost ~]# awk 'BEGIN{RS="*"; FS="-1/NO,"}NF>1{print $NF}' log2
 PROPERTY: 1: 1=MISSING AA. PROPERTY -
RECORD
[root@localhost ~]#

需要您对此的建议。

awk
1个回答
0
投票

不清楚您想要使用哪些字符串作为

RS
或为什么换行符出现在输出的某些部分而不是其他部分,但也许其中之一就是您想要做的,或者至少会给您一个想法如何做你想做的事情,使用 GNU awk 进行多字符
RS
RT
:

$ awk 'BEGIN{RS="[#*]"} {$1=$1} sub(".*-1/NO, ","")' log2
LIMIT: 1:1=MISSING LIMIT - RECORD
PROPERTY: 1: 1=MISSING AA. PROPERTY - RECORD

$ awk 'BEGIN{RS="[#*]"} sub(".*-1/NO, ","")' log2
LIMIT: 1:1=MISSING LIMIT - RECORD
PROPERTY: 1: 1=MISSING AA. PROPERTY -
RECORD

$ awk 'BEGIN{RS="[#*]"} {$NF=ORS $NF} sub(".*-1/NO, ","")' log2
LIMIT: 1:1=MISSING LIMIT -
RECORD
PROPERTY: 1: 1=MISSING AA. PROPERTY -
RECORD

$ awk 'BEGIN{RS="RECORD"} {$NF=$NF " " RT} sub(".*-1/NO, ","")' log2
LIMIT: 1:1=MISSING LIMIT - RECORD
PROPERTY: 1: 1=MISSING AA. PROPERTY - RECORD

$ awk 'BEGIN{RS="RECORD"} {$0=$0 RT} sub(".*-1/NO, ","")' log2
LIMIT: 1:1=MISSING LIMIT - RECORD
PROPERTY: 1: 1=MISSING AA. PROPERTY -
RECORD

$ awk 'BEGIN{RS="RECORD"} {$NF=$NF ORS RT} sub(".*-1/NO, ","")' log2
LIMIT: 1:1=MISSING LIMIT -
RECORD
PROPERTY: 1: 1=MISSING AA. PROPERTY -
RECORD

当然,还有很多其他的可能性。

© www.soinside.com 2019 - 2024. All rights reserved.