【问题标题】:How to get patterns from text file in unix and formating them into a table如何从 unix 中的文本文件中获取模式并将它们格式化为表格
【发布时间】:2016-05-14 19:38:21
【问题描述】:

我需要在 Unix 系统中解析 .conf 文件才能得到以下粗体内容:

[sub_suffix-324]
; generated by mod_identity
exten => int,1,GoSub(mdc_template-3,s,1)
exten => int,n(next_380),Return()
; default action for busy
exten => ext,1,GoSub(mdc_template-3,s,1)
exten => ext,n,Set(PRI_CAUSE=17)
exten => ext,n,HangUp(17)
exten => ext,n(back),Return()

输出到另一个文件后(不确定我们是否可以直接这样做)如下:

[sub_suffix-324]
exten => int,1,GoSub(mdc_template-3,s,1)
exten => ext,1,GoSub(mdc_template-3,s,1)

我需要依赖这个输出来生成下面的格式,我的意思是如果我们找到了

模板-3

然后在一个条件下使用,看看有没有

int 或 ext

在同一行,如果条件为真则输出是:

分机 int_voicemail ext_voicemail

324 是的

我试图使用 awk 命令,但没有运气如何继续:D

#!/usr/bin/awk -f

/^\[sub_suffix-/ {

  print $0
  next
}

/mdc_template/ {
flag=1
x=$0
next
}

提示:该文件包含多次出现此 sn-p,因此输出将是 csv 文件格式!!。

任何帮助表示赞赏! 谢谢

【问题讨论】:

  • 最好不要修改问题的输入,但还要准确显示输出应该是什么样的 - 以及你的 awk 命令是什么样的。
  • 准确的输入、期望的输出以及输出背后的原理都不清楚。
  • 您唯一声明的要求是Since the yes under int/ext_voicemail determined if the bold content corresponding to each one(int,ext) exist if not set to No.,不幸的是这在英语中没有任何意义。请编辑您的问题以尽可能澄清并包括简洁的示例输入和预期输出。

标签: parsing unix awk


【解决方案1】:

使用数组测试intext 条件,以及suffix 块的计数器:

/^\[sub_suffix-/ {
sub_suffix[++n_suffixes]=$0
is_int_mdc_template[n_suffixes]="no"
is_ext_mdc_template[n_suffixes]="no"
}

/exten => int.*mdc_template/ {
is_int_mdc_template[n_suffixes]="yes"
int_mdc_template[n_suffixes]=$0
}

/exten => ext.*mdc_template/ {
is_ext_mdc_template[n_suffixes]="yes"
ext_mdc_template[n_suffixes]=$0
}

END {
for (i=1; i<=n_suffixes; i++) {
  print sub_suffix[i], is_int_mdc_template[i], is_ext_mdc_template[i]
}
}

然后您可以使用substrmatchgsubgensub 函数之一来提取您想要的suffix 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2015-03-14
    • 2016-10-17
    相关资源
    最近更新 更多