需要将输出拆分为行和列

需要将输出拆分为行和列

我目前正在编写一个脚本,该脚本将捕获交换机上的所有端点名称和正在进行的调用,并将输出发送到一个文件。

目前输出如下。

Registration ID                               Nitin_01
Ongoing Calls                                 9 (0:9)
Registration ID                               Nitin_02
Ongoing Calls                                 6 (6:0)

更多端点如下(大约有 200 多个端点)

我在这里想要的输出应该如下所示。

Registration ID  Ongoing Calls
Nitin_01           9
Nitin_02           6

脚本如下。在建议之后,当我将以下输出保存在脚本中时,它会给出我想要看到的输出,但它仍然没有出现在原始和列中。

输出如下所示。

Nitin SBC:~ # cat /root/Nick.csv | more
Registration ID Ongoing Calls
  Nitin_03 26
  Nitin_01 0

代码:

ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
{ date '+%F %T'; 
  "$ipath"/cli iedge list |
     awk 'BEGIN { print "Registration ID", "Ongoing Calls"}
        /Registration ID/ { id = $3; next }
        /Ongoing Calls/ { print id, $3 }'
} >> "$ifile"`

cli iedge list该命令帮助我们获取交换机上配置的所有端点的信息。

有人可以帮我解决这个问题吗?

答案1

尝试这个:

ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
{ date '+%F %T'; 
  "$ipath"/cli iedge list |
    awk -v OFS='\t' \
      'BEGIN { print "Registration ID", "Ongoing Calls"}
       /Registration ID/ { id = $3; next }
       /Ongoing Calls/ { print id, $3 }'
} >> "$ifile"

答案2

如果你想使用grep,那么你可以这样做:

paste <(cat input.txt | grep -oP "Registration ID\s+\K.+") <(cat input.txt | grep -oP "Ongoing Calls\s+\K.+")

这是假设您将 的输出保存cli iedge list在某个input.txt文件中。

答案3

修改 awk 脚本以输出选项卡并通过管道column -t -s<TAB>

ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
{ date '+%F %T'; 
  "$ipath"/cli iedge list |
     awk 'BEGIN {OFS="\t"; print "Registration ID", "Ongoing Calls" }
        /Registration ID/ { id = $3; next }
        /Ongoing Calls/ { print id, $3 }' |
     column -t -s$'\t'
}  >> "$ifile"`

输出将是:

2015-06-03 11:11:33
Registration ID      Ongoing Calls
Nitin_01             9
Nitin_02             6

相关内容