gpt4 book ai didi

linux - 将输出文件拆分为不同的子文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:50 26 4
gpt4 key购买 nike

我有一个包含数据的输出文件:

 -> Added to botcc.rules (2)

alert tcp any any -> any any (msg:"testing rule 1";sid:1323;rev:1;)

alert tcp any any -> any any (msg:"testing rule 2";sid:1323;rev:1;)

-> Added to compromised.rules (1)

alert tcp any any -> any any (msg:"testing rule for comp";sid:1323;rev:1;)

我需要 shell 脚本,它应该将上面的输出拆分为不同的子文件,它们的名称为 botcc.rulescompromised.rules 具有各自的规则(数据下方).

最佳答案

使用强大的awk语言的解决方案:
我们将在每次出现模式 > 添加到 时将输入文件拆分为多个文件。但是包含模式的行不应该在新文件中。

awk '/> Added to/{ x=$4;next }{ print > x }' inputfile

此命令包含 2 组大括号:
控件仅在遇到包含模式 > 添加到 的行时转到第一组大括号。由于next命令,包含>Added to的行进入第一个花括号,然后由于next立即开始读取下一行> 命令。结果,> Added to 行没有到达第二个大括号,因此 > Added to 没有出现在拆分文件中。
由于没有条件,所以每一行都会遇到第二组,因此总是为真。

x=$4 - x 变量被分配第四个字段值 $4(""(空格)是默认值 awk 字段分隔符,因此,第 4 个字段将包含一个文件名,例如 botcc.rules)


botcc.rules 内容的输出:

$ cat botcc.rules
alert tcp any any -> any any (msg:"testing rule 1";sid:1323;rev:1;)

alert tcp any any -> any any (msg:"testing rule 2";sid:1323;rev:1;)

compromised.rules 内容的输出:

$ cat compromised.rules

alert tcp any any -> any any (msg:"testing rule for comp";sid:1323;rev:1;)

关于linux - 将输出文件拆分为不同的子文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42803806/

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