gpt4 book ai didi

python - 根据输入文件内容创建多个命名管道(fifo)

转载 作者:行者123 更新时间:2023-11-30 23:32:06 25 4
gpt4 key购买 nike

这个脚本将一个日志文件拆分为一些较小的文件:

#!/bin/awk -f
/topic = / { topic = $NF }
/ : / { print $3 >> topic "___" $1 } # $1 is the field name

输入文件示例:

topic = foo
A : 23
BB : Text1
Zz : 77

topic = bar
A : 88
B : 66

topic = foo
A : 25
B : 12
BB : Text2

生成的输出文件名示例:

foo___A
foo___B
foo___BB
foo___Zz
bar___A
bar___B

但现在,我想创建输出fifo而不是常规文件

fifo(命名管道)应使用与当前常规文件相同的文件名。例如,可以使用 编写 shell 脚本。工具如下:

mkfifo foo___A
mkfifo foo___B
mkfifo foo___BB
mkfifo foo___Zz
mkfifo bar___A
mkfifo bar___B

常识:

  • 脚本不应了解所有可能的主题和字段
  • 该脚本不需要多次创建相同的 fifo

如果不适合此目的,我对任何其他语言持开放态度,如 , , , 等等...

您会选择哪种编程语言来实现此脚本? shell/awk/perl/python/ruby...
您建议实现什么?

<小时/>

编辑:Kevin's answer是正确的。他的脚本还有另一种替代方案:

#!/usr/bin/awk -f

/topic = / { topic = $NF }
/ : / {
file = topic "___" $1
system("test ! -e "file" && mkfifo "file)
print $3 > file
}

您仍然可以基于 awk 或任何其他编程语言提出您的想法;)

要测试您的脚本,您可以在另一个终端中运行以下 shell 命令:

while true; do find -name '*___*' -ls -exec head '{}' '+'& sleep 1; done

最佳答案

#!/usr/local/bin/awk -f 

/topic = / { topic = $NF }
/ : / {
file = topic "___" $1
system("mkfifo "file)
print $3 > file
close(file)
system("rm "file)
}

请记住,print 将阻塞,直到您从 fifo 读取数据,因此您需要将 awk 命令置于后台或从另一个终端读取它们。

关于python - 根据输入文件内容创建多个命名管道(fifo),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19544113/

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