linux - 使用 AWK 或 SED 以及以下标签以逗号分隔

标签 linux shell unix sed awk

使用 AWK 或 SED 并使用以下标签以逗号分隔:

[BEGIN AccountID]
        [BEGIN CallerID]
            [BEGIN Billed Account Attributes]
            1111111
            1111111
            1111111
            [END Billed Account Attributes]

        [BEGIN OBIO Tax]
        10
        20
        30
        [END OBIO Tax]

        [BEGIN RINO Tax]
        777
        888
        999
        [END RINO Tax]
    [BEGIN CallerID]
[END AccountID]


[BEGIN AccountID]
    [BEGIN CallerID]
        [BEGIN Billed Account Attributes]
        2222222
        2222222
        2222222
        [END Billed Account Attributes]

        [BEGIN OBIO Tax]
        40
        50
        60
        [END OBIO Tax]

    [BEGIN CallerID]
[END AccountID]

我想要 AWK 或 SED 脚本来打印此内容:

1111111,1111111,1111111,  10,20,30,  777,888,999

2222222,2222222,2222222,  40,50,60,    0,  0,  0
....
....
....

以逗号分隔,未显示 RINO TAX 时填零。

非常感谢!!!!

最佳答案

这可能对你有用(GNU sed):

sed '/\[BEGIN AccountID\]/,/\[END AccountID\]/!d;/\[BEGIN AccountID\]/{h;d};/./H;/\[END AccountID\]/!d;g;s/\n*\[[^\n]*\n*//g;s/\n/,/g;s/\s*//g;ta;:a;s/,//9;t;s/$/0,0,0/' file

注意这会删除空格和空行。

关于linux - 使用 AWK 或 SED 以及以下标签以逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460542/

相关文章:

bash - bash/shell 数字上下文中的递归变量扩展从何而来?

unix - UNIX 目录何时更改其时间戳

linux - 为什么信号量被视为IPC?

c - Ubuntu 中的 skbuff.h 文件在哪里?

linux - 最后一个特定字符后的表达式

macos - 去安装不使用 zsh

c - readdir 和 getdents 接口(interface)——读取的字节数?

PHPMyAdmin 在 Debian 上安装时不要求输入 Mysql 密码

linux - 如何避免由于套接字文件导致的Linux移动错误?

java - 从 Django 在服务器上运行 Java