gpt4 book ai didi

linux - 如何 Grep 信息和结果在列中(Linux)

转载 作者:可可西里 更新时间:2023-11-01 11:51:31 25 4
gpt4 key购买 nike

我要处理以下数据,以便每个以 <SUBBEGIN 开头的数据 block 并以 <SUBEND 结尾将被处理。

<SUBBEGIN
AARB:28E5A4ERR
SUBSCRIBERIDENTIFIER:234810128
GBRUL:0
GBRDL:0
SUBSCRIPTION:5093201&733D8E01CA&1&FFFFFFFFFFFFFF&20160729121530&FFFFFFFFFFFFFF&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1
SUBSCRIPTION:5233555&733D8E01CA&1&FFFFFFFFFFFFFF&20160730091530&FFFFFFFFFFFFFF&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1
QUOTA:5093201&733D8201D10D270D&1&1&0&1&20171121043000&20171221043000&0&255&0&0&0&0&0&0&0&0&0
QUOTA:5233555&633D8201D10D270D&1&1&0&1&20171121043000&20171221043000&0&255&0&0&0&0&0&0&0&0&0
ONLINESTATUS:2
LATEST_ONLINE_TIME:20170330191209
CREATETYPE:0
MAXOFFLINEDAYS:0
<SUBEND
<SUBBEGIN
BBRB:28E5A4ETT
SUBSCRIBERIDENTIFIER:234825528
GBRUL:0
GBRDL:0
SUBSCRIPTION:5093333&733D8E01CA&1&FFFFFFFFFFFFFF&20160729121530&FFFFFFFFFFFFFF&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1
QUOTA:5093264&733D8201D10D270D&1&1&0&1&20171121043000&20171221043000&0&255&0&0&0&0&0&0&0&0&0
ONLINESTATUS:2
LATEST_ONLINE_TIME:20170330191209
CREATETYPE:0
MAXOFFLINEDAYS:0
<SUBEND
<SUBBEGIN
CCRB:28E5A4ESS
SUBSCRIBERIDENTIFIER:234993527
GBRUL:0
GBRDL:0
SUBSCRIPTION:5093264&733D8E01MB&1&FFFFFFFFFFFFFF&20160729121530&FFFFFFFFFFFFFF&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1
SUBSCRIPTION:9093201&733D8E01CA&1&FFFFFFFFFFFFFF&20160729121530&FFFFFFFFFFFFFF&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1
SUBSCRIPTION:6598777&733D8E01CA&1&FFFFFFFFFFFFFF&20160730091530&FFFFFFFFFFFFFF&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1
QUOTA:5093264&733D8201D10D270D&1&1&0&1&20171121043000&20171221043000&0&255&0&0&0&0&0&0&0&0&0
QUOTA:9093201&733D8201D10D270D&1&1&0&1&20171121043000&20171221043000&0&255&0&0&0&0&0&0&0&0&0
QUOTA:6598777&633D8201D10D270D&1&1&0&1&20171121043000&20171221043000&0&255&0&0&0&0&0&0&0&0&0
ONLINESTATUS:2
LATEST_ONLINE_TIME:20170330191209
CREATETYPE:0
MAXOFFLINEDAYS:0
<SUBEND

我已经使用过这个 linux 命令: grep -e SUBSCRIBERIDENTIFIER -e SUBSCRIPTION -e QUOTA但是我得到了行的结果,而我需要它在下面的列中(请将下面的期望复制到 ultredit 程序以查看完整长度):

SUBSCRIBERIDENTIFIER:234810128 SUBSCRIPTION:5093201 SUBSCRIPTION:5233555                        QUOTA:5093201 QUOTA:5233555
SUBSCRIBERIDENTIFIER:234825528 SUBSCRIPTION:5093333 QUOTA:5093264
SUBSCRIBERIDENTIFIER:234993527 SUBSCRIPTION:5093264 SUBSCRIPTION:9093201 SUBSCRIPTION:6598777 QUOTA:5093264 QUOTA:9093201 QUOTA:6598777

请帮忙。

最佳答案

尝试:

$ awk -F'&' '{sub(/^[[:blank:]]+/,"")} /SUBSCRIBERIDENTIFIER/{id=$1} /SUBSCRIPTION/{s=s","$1} /QUOTA/{q=q","$1} /SUBEND/{print id,s,q; id=""; s=""; q=""}' data | column -t | tr , ' '
SUBSCRIBERIDENTIFIER:234810128 SUBSCRIPTION:5093201 SUBSCRIPTION:5233555 QUOTA:5093201 QUOTA:5233555
SUBSCRIBERIDENTIFIER:234825528 SUBSCRIPTION:5093333 QUOTA:5093264
SUBSCRIBERIDENTIFIER:234993527 SUBSCRIPTION:5093264 SUBSCRIPTION:9093201 SUBSCRIPTION:6598777 QUOTA:5093264 QUOTA:9093201 QUOTA:6598777

工作原理

  • -F'&'

    这告诉 awk 使用 & 作为字段分隔符。

  • sub(/^[[:blank:]]+/,"")

    这会删除每行中的所有前导空格。

  • /SUBSCRIBERIDENTIFIER/{id=$1}

    这会将 SUBSCRIBERIDENTIFIER 信息保存在变量 id 中。

  • /SUBSCRIPTION/{s=s","$1}

    这会将所有订阅信息以逗号分隔的格式保存在变量 s 中。

  • /QUOTA/{q=q","$1}

    这会将所有 QUOTA 信息以逗号分隔的格式保存在变量 q 中。

  • /SUBEND/{打印 id,s,q; id="";小号=“”; q=""}

    每次我们到达 SUBEND 时,我们打印出一行数据并重置所有变量

  • 列-t

    这会将输出数据格式化为列。

  • tr , ' '

    这会从输出中删除逗号。

更新

根据您的评论,您正在使用的文件名称是 UPCC_5_20171124144300_0_huabiao1_601.txt,您希望将结果附加到文件 Result.txt 中。在这种情况下,运行:

awk -F'&' '{sub(/^[[:blank:]]+/,"")} /SUBSCRIBERIDENTIFIER/{id=$1} /SUBSCRIPTION/{s=s","$1} /QUOTA/{q=q","$1} /SUBEND/{print id,s,q; id=""; s=""; q=""}' UPCC_5_20171124144300_0_huabiao1_601.txt | column -t | tr , ' ' >>Result.txt

注意这里不需要cat命令。

关于linux - 如何 Grep 信息和结果在列中(Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com