此awk脚本将一个日志文件拆分为一些较小的文件:
#!/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(命名管道)应该使用与当前常规文件相同的文件名。例如,可以使用mkfifo工具编写一个 shell 脚本,如下所示:
mkfifo foo___A
mkfifo foo___B
mkfifo foo___BB
mkfifo foo___Zz
mkfifo bar___A
mkfifo bar___B
常识:
- 脚本不应该知道所有可能的主题和领域
- 该脚本不需要创建多次相同的FIFO
如果awk不适合此目的,我愿意接受任何其他语言,如bash、zsh、perl、python等。...
你会选择什么编程语言来实现这个脚本?shell/awk/perl/python/ruby...
你建议什么作为实现?
编辑:凯文的回答是正确的。他的剧本还有另一种选择:
#!/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