微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用awk的输出来运行命令

我是全新的shell脚本,似乎无法弄清楚这个看似简单的任务。 我有一个约250行的文本文件(ciphers.txt),我想使用每行的第一列作为参数在一个命令。 任何帮助将不胜感激!

该命令是:

openssl s_client -connect host:port -cipher argument

当我一次只做一个,但是我真的不想运行同样的命令250+次。 这是我的脚本到目前为止:

awk '{command = "openssl s_client -connect localhost:4433 -cipher > results.txt" print $0 | command}' ciphers.txt

我不断收到一个错误,所以我很确定我有一个语法错误的地方。 awk的输出被附加在后面?

如何从文件中find单词到另一个文件? Linux的

如何输出有效/无效input列表的计数?

比较不同列的两个文件并打印不同的列

通过使用grep来计算第1位和第14位之间的零的数量

有没有办法在Unix中的文件删除重复的头文件

使用awk来计算logging的数量

如何在Bash脚本中的AWK中传递string作为参数

修剪awk中的string的前导和尾随空格

在awk中转义HTML特殊字符

需要在awk unix中使用代码或使用substr

在awk中使用system

awk '{ system("openssl s_client -connect host:port -cipher " $1) }' ciphers.txt

你的命令有很多错误。 对于你想要使用第一列的人。 这在awk中被称为$ 1而不是$ 0(这将是整个行)。 其次,你在命令定义的末尾忘了分号。

要真正运行命令,你可以使用system()或管道(后者只有在命令可以从标准输入读取时才有意义,我认为openssl在你的情况下是不行的)。 最简单的会是这样的

awk '{cmd="openssl s_client -connect host:port -cipher" $1; system(cmd)}' results.txt

请注意,这只会返回退出状态。 如果你需要捕获标准输出,你将不得不通过getline来输出命令。

安德烈亚斯

PS:发布你得到的实际错误,会有所帮助。

xargs命令专门用于该用例。

awk '{print $0}' <ciphers.txt | xargs -I{} openssl s_client -connect host:port -cipher {} >>results.txt

这个版本比较长,因为awk已经被用来解析$0 。 然而,当你已经有一个使用的列表,并且没有运行一些可以执行子shell的东西的时候, xargs会派上用场。 例如, awk可以用于执行mv但是xargs要简单得多。

ls -1 *.txt | xargs -I{} mv "{}" "{}.$(date '+%y%m%d')"

上述命令将当前目录中的每个文本文件重命名为日期标记的备份。 awk的等价物需要在date命令的结果中加上一个变量,将其传递给awk ,然后构造并执行该命令。

xargs命令还可以将多个参数累加到一行中,如果输入具有多个列,或者在输入文件中将单个记录拆分为重复组时,这些参数将很有用。

有关所有使用方法的更多信息,请参阅UNIX Mantra上的“xargs”一体化教程指南 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐