我有一个C程序,我想通过在shell脚本中使用awk来调用。我该如何做这样的事情?使用awk调用可执行程序
回答
从AWK手册页:
system(cmd) executes cmd and returns its exit status
的GNU AWK manual也有a section,在部分,介绍了system
功能,并提供了一个示例:
system("date | mail -s 'awk run done' root")
感谢您的帮助!我在busybox中有一个shell命令:logread -f | awk {if .....}和awk内部,当if语句对参数为真时,我想在c中调用我的程序。你能给我一个提示吗? – user2030431
尝试'logread -f | AWK“{如果(condition01){系统(‘yourCprogram参数’)}}”' – nullrevolution
@ user2030431你会是不错的读者,如果你将更新所有/详细信息您的问题。是的,我知道它有点晚了:) – Felix
有几种方法。
awk有一个
system()
功能,将运行shell命令:system("cmd")
您可以打印到管道:
print "blah" | "cmd"
你可以有AWK构建命令,并将所有输出传递给shell:
awk 'some script' | sh
东西这么简单将工作
awk 'BEGIN{system("echo hello")}'
和
awk 'BEGIN { system("date"); close("date")}'
这真的取决于:)在方便的Linux核心utils软件包(info coreutils
)是xargs
。如果您使用的是awk
,那么您可能需要考虑更多的用例 - 您的问题没有详细说明。
printf "1 2\n3 4" | awk '{ print $2 }' | xargs touch
将执行touch 2 4
。这里touch
可以被你的程序替换。更多信息在info xargs
和man xargs
(真的,阅读这些)。 我相信你想用你的程序替换touch
。
击穿beforementioned脚本:
printf "1 2\n3 4"
# Output:
1 2
3 4
# The pipe (|) makes the output of the left command the input of
# the right command (simplified)
printf "1 2\n3 4" | awk '{ print $2 }'
# Output (of the awk command):
2
4
# xargs will execute a command with arguments. The arguments
# are made up taking the input to xargs (in this case the output
# of the awk command, which is "2 4".
printf "1 2\n3 4" | awk '{ print $2 }' | xargs touch
# No output, but executes: `touch 2 4` which will create (or update
# timestamp if the files already exist) files with the name "2" and "4"
更新在原来的答案,我用echo
代替printf
。然而,printf
是一个更好,更便携的选择,正如评论指出的那样(可以找到与讨论有很大联系的地方)。
#!/usr/bin/awk -f
BEGIN {
command = "ls -lh"
command |getline
}
流程“LS -lh”在awk脚本
你确定这可以吗?这不起作用。 –
我用awk的力量来删除一些我停泊坞窗容器。仔细观察我如何构造cmd
字符串,然后将其传递给system
。
docker ps -a | awk '$3 ~ "/bin/clish" { cmd="docker rm "$1;system(cmd)}'
在这里,我使用具有图案“/斌/ clish”第3列,然后我提取容器ID在第一列中,构建我cmd
串和通过了给system
。
我能有通过以下方法完成这件事
cat ../logs/em2.log.1 |grep -i 192.168.21.15 |awk '{system(`date`); print $1}'
awk有一个调用的系统功能它使您能够AWK的输出中执行任何Linux bash命令。
- 1. 使awk文件可执行
- 2. 如何从C程序(使用winapi)调用可执行文件?
- 3. 使可执行的Python应用程序
- 4. 调试使用NativeProcess API调用可执行文件的Adobe AIR应用程序
- 5. 执行使用Java程序
- 6. 使用“Runas”执行程序
- 7. 使用python执行程序
- 8. 使用PHP执行程序
- 9. 可调用是否按顺序执行?
- 10. 网络应用程序多次调用可执行文件
- 11. 从ColdFusion应用程序调用Windows可执行文件(.exe)
- 12. 执行应用程序关闭执行程序应用程序
- 13. 使用执行/可执行
- 14. 从awk块中调用另一个命令行应用程序
- 15. 使用C#进程运行可执行程序
- 16. 处理程序调用notifyDataSetChanged()不执行
- 17. 使用PyInstaller使Kivy应用程序可执行
- 18. 向可执行文件提交可调用的执行程序服务会导致程序挂起
- 19. 查找调用可执行
- 20. javafx8应用程序可执行
- 21. Java可执行应用程序
- 22. Java执行程序只调用外部可执行文件的速度稍快
- 23. 使用flask/python框架自动下载并执行可执行应用程序
- 24. 无法从C++程序调用可执行文件
- 25. 调试由应用程序创建的可执行文件
- 26. 我可以从外部捕获程序调用和执行吗?
- 27. 在C程序中调用默认的Windows可执行文件
- 28. 使用Netbeans调试器与不使用调试器执行可运行程序之间的区别
- 29. 使用执行程序进行GC调整
- 30. 多次通过使用awk和执行顺序
编译的C程序仅仅是一个程序...只要运行它,就像你的任何命令行操作... – PearsonArtPhoto
你可以叫'系统()'用awk来执行命令。也许你可以进一步解释你的需求,因为有一个更好的方法去做这个> 90%的时间。 – Grambot
这通常是错误的方法。如果你发布一个小awk脚本,并解释当你想打电话给你的C程序,我们可以告诉要么怎么做,或有什么更好的办法是。 –