【发布时间】:2020-12-30 22:42:00
【问题描述】:
我有一个包含以下内容的文件。它是在设备中查询的结果,因此预计在数据库中找不到某些输入。以下示例是成功和不成功查询的结果。我的意思是第二个示例没有我想要捕获到变量中的所有信息,所以我想忽略这个结果并将变量设置为 null/空值。
<INTLPO:ISV=PORTAB NTL="6130290095" VEM=NAO;
VECTURA - SS BSA002 2020-09-12 09-32
INTLPO:ISV=PORTAB NTL="6130290095" VEM=NAO;
INTERROGACAO DE NUMERO TELEFONICO PARA PORTABILIDADE NUMERICA
TIPO DE ENCAMINHAMENTO POR ASSINANTE
NTL = 6130290095 OPC = S_INF RNP = 551 CSP = 25
EIP = S_INF
CDO = 00961
CNL = 61000 NUF = S_INF TPB = PREST
CPT = NAO CRE = 125 NUE = S_INF
DAT = 2014-04-16 HOR = 10:30:20.798609
TBR = 25
RST MAN RST MAN RST MAN
2% 934 3% 934 4% 934
5% 934 6% 934 7% 934
8% 934 9% 934 9090% 934
0??% 934 90??% 934 0?0% 934
TOTAL DE NUMEROS ASSOCIADOS AO SERVICO: 1
<INTLPO:ISV=PORTAB NTL="6160150178" VEM=NAO;
VECTURA - SS BSA002 2020-09-12 09-32
INTLPO:ISV=PORTAB NTL="6160150178" VEM=NAO;
INTERROGACAO DE NUMERO TELEFONICO PARA PORTABILIDADE NUMERICA
ME: NENHUM NUMERO CADASTRADO ATENDE AS ESPECIFICACOES
我有以下部分可以的代码。结果有点混乱(行重复,甚至值错误)。
awk -F ' ' 'BEGIN { OFS="," }
/^VECTURA/ { equipment = $4; data = $5 }
/^INTLPO/ { numero = $2}
/^\s*NTL/ { ntl = $3 ; opc = $6; rnp = $9; csp = $12}
/^\s*EIP/ { eip = $3}
/^\s*CDO/ { cdo = $3}
/^\s*CNL/ { cnl = $3; nuf = $6; tpb = $9}
/^\s*CPT/ { cpt = $3; cre = $6; nue = $9}
/^\s*DAT/ { dat = $3; hor = $6}
/^\s*TBR/ { tbr = $3}
/^\s*RST/ { man = $2; next}
{ print data, equipment, numero, ntl, opc, rnp, csp, eip, cdo, cnl, nuf, tpb, cpt, cre, nue, dat, hor, tbr, man}' input.tx >> output.txt
结果
2020-09-12,BSA002,6160150536,,,,,,,,,,,,,,,,
2020-09-12,BSA002,6160150536,,,,,,,,,,,,,,,,
2020-09-12,BSA002,6130290095,,,,,,,,,,,,,,,,
2020-09-12,BSA002,6130290095,,,,,,,,,,,,,,,,
2020-09-12,BSA002,6130290095,,,,,,,,,,,,,,,,
2020-09-12,BSA002,6130290095,,,,,,,,,,,,,,,,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,,,,,,,,,,,,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,,,,,,,,,,,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,,,,,,,,,,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,,,,,,,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,,,,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6130290095,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6160150178,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6160150178,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6160150178,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6160150178,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6160150178,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6160150178,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
2020-09-12,BSA002,6160150178,6130290095,S_INF,551,25,S_INF,00961,61000,S_INF,PREST,NAO,125,S_INF,2014-04-16,10:30:20.798609,25,MAN
请注意,记录 6130290095(变量 NTL)与“数字”记录(上例的最后几行)错误地关联。
我该如何克服呢?我尝试了一些 AWK 条件语句,但也没有成功。 作为输出,我只想逐行记录,因为输出示例的某些行可以举例说明。 非常感谢。
【问题讨论】:
-
如果您只想打印一次结果,请使用
END { print ...}。 -
请包含您的示例输入文件的预期输出。它是一个文件吗?它的外观如何? (或者一个 bash 数组?)
-
我不想只打印一次。我只想每条记录打印一次。例如:我有一个包含 50 个查询的列表,其中一些包含我需要的所有信息,而另一些则没有。输出是 50 条“数字”记录的列表,对于那些拥有我想打印的所有信息的人,我想用逗号分隔它们(就像前面提供的示例中的最后一个),而那些没有的人,被打印为"6130300000,BSA2,,,,,,,,,,,,,,,,,,,,,,,......
-
输入是脚本中显示的文件(input.txt >> output.txt)。再次感谢。
-
从 RST MAN 行中提取什么?
标签: regex shell awk readfile text-processing