将一个命令输出传递给另一命令

时间:2018-08-09 10:56:33

标签: linux awk sed

我想通过awk '{print $3}' mysql提取第3列,并在该文件(mysql)的开头添加command[column 3 output]=,依此类推。 我无法使用sed来做到这一点:

sed "s/^/command[$(awk '{print $3}' mysql)]=/" mysql  

文件内容:

/usr/local/check_abc -a Handler_read_rnd -A Handler_read_rnd -w ">49000000" -c ">50000000"
/usr/local/check_abc -a Handler_delete -A Handler_delete -w ">520000" -c ">530000"

输出应类似于:

command[Handler_read_rnd]=/usr/local/check_abc -a Handler_read_rnd -A Handler_read_rnd -w ">49000000" -c ">50000000"
command[Handler_delete]=/usr/local/check_abc -a Handler_delete -A Handler_delete -w ">520000" -c ">530000"

如何使该命令起作用?

预先感谢

3 个答案:

答案 0 :(得分:2)

只需使用awk

awk '{print "command[" $3 "]=" $0}' mysql.txt

说明:

$0是一个特殊变量,它包含整个输入行。 $1-$xxx包含输入中的字段。 $3是字段3。

输出:

command[Handler_read_rnd]=/usr/local/check_abc -a Handler_read_rnd -A Handler_read_rnd -w ">49000000" -c ">50000000"
command[Handler_delete]=/usr/local/check_abc -a Handler_delete -A Handler_delete -w ">520000" -c ">530000"

答案 1 :(得分:0)

一个非常简单的搜索最终使我发现了这一点: https://unix.stackexchange.com/questions/108782/pass-the-output-of-previous-command-to-next-as-an-argument

我引用:

  

要回答您的问题,听起来好像您想获取汇率   从第一个命令的输出中,然后将比率用作   第二个命令的命令行参数。这是一种方法   

rate=$(command1 | sed -ne 's/^rate..\([0-9]*\)%.*/\1/p')
command2 -t "rate was $rate"

如果该页面不够用,请查看该页面以获取更多信息。

答案 2 :(得分:0)

这可能对您有用(GNU sed):

sed -r 's/^((\S+)(\s+)?){3}/command[\2]=&/' file

匹配每行的前三个参数,并使用模式匹配和分组来制造所需的字符串。

组内的组迭代始终记住最后一场比赛。