解析由“类别”分隔的文件

时间:2013-08-15 15:47:08

标签: linux shell

这是我的问题:

A)我是一个脚本新手

B)我有一个文件,我需要将数据分成CSV样式表,我的问题是有三个数据区域(见下文):

(Area 1, not relevant) Total IPv4 packets captured: 2245686
# L4 Protocol   # Packets   Relative Frequency[%]   Protocol description

1   5602       0.249456 Internet Control Message Protocol 
.... (more data here)

(Area 2, relevant) Total TCP packets: 2238186
# Port  # Packets   Relative Frequency[%]   Protocol description

22  2138555   95.548583 The Secure Shell (SSH) Protocol
.... (more data here)

(Area 3, relevant) Total UDP packets: 1623
# Port  # Packets   Relative Frequency[%]   Protocol description

.... (more data here)

(Area 4, relevant) Total SCP packets: 0
# Port  # Packets   Relative Frequency[%]   Protocol description

.... (more data here)

(这是Tranalyzer _protocols输出)

所以我需要做的是使输出看起来像:

# Port,# Packets,Relative Frequency[%],Protocol description
22,2138555,95.548583,The Secure Shell (SSH) Protocol,(more data...)

但我还需要从每个区域获取数据并将其放在单独的CSV文件(TCP,UDP,SCP)中,以便我放入表中的所有流(每个流在不同子目录中的不同_protocols文件中)数据可以进入这三个文件中的一个并构建一个破坏内存的电子表格(因此为什么是CSV。)

我也完全乐于用任何其他方式表达任何人都可以提出的建议。

非常感谢!

1 个答案:

答案 0 :(得分:1)

以下命令将数据文件提取并转换为csv 将x更改为TCP,UDP或SCP以提取特定数据集 执行前将<analyzer_output.txt>更改为正确的文件名。

x="SCP"; \
cat <analyzer_output.txt> | sed "1,/^Total $x/d; /^Total /,\$d; /^\s*$/d" | \
sed 's/\([0-9]\)\s\+\([0-9]\)/\1,\2/g; s/\([0-9]\)\s\+\([A-Za-z]\)/\1,\2/g' \
> $x.csv

生成SCP.csv文件以获取以下样本数据

41,2138555,95.548583,The Secure Shell (SSH) Protocol
42,2138555,95.548583,The Secure Shell (SSH) Protocol

示例数据文件

Total IPv4 packets captured: 2245686
1   5602       0.249456 Internet Control Message Protocol
2   5602       0.249456 Internet Control Message Protocol

Total TCP packets: 2238186
21  2138555   95.548583 The Secure Shell (SSH) Protocol
22  2138555   95.548583 The Secure Shell (SSH) Protocol

Total UDP packets: 1623
31  2138555   95.548583 The Secure Shell (SSH) Protocol
32  2138555   95.548583 The Secure Shell (SSH) Protocol

Total SCP packets: 0
41  2138555   95.548583 The Secure Shell (SSH) Protocol
42  2138555   95.548583 The Secure Shell (SSH) Protocol