使用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”一体化教程指南 。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....