我在命令之后有这个输出:
$some_command
id
274725
275050
275065
277560
277801
277814
277817
277862
277863
我需要忽略第一行并将所有数字设置为变量:
var1=274725
var2=275050
...
...
var9=277863
然后我想使用这些变量作为参数运行命令:
$some_cmd $var 1 $var 2 ...$varN
凭借我非常有限的知识,我知道如何计算变量的数量:
varN1=`some_command | wc -l`
varsN=`expr $varN1 - 1`
但这不是最简单的解决方案,我不知道如何在其中设置变量以及如何构造命令进行循环。也许是这样的?
for i in (1...$varsN)
do
var$i=.... ?
看起来你只是把它们放到变量中,这样你就可以把它们传递给另一个函数/程序。这实际上没有必要。
xargs
,在输入参数组上运行多个子任务的程序,可以选择限制它传递给每个任务的参数数量:
pax> echo 'id
274725
275050
275065
277560
277801
277814
277817
277862
277863' | awk 'NR>1{print}' | xargs -n 4 echo runcommand
runcommand 274725 275050 275065 277560
runcommand 277801 277814 277817 277862
runcommand 277863
awk
命令只是去掉第一行,然后xargs -n 4
将为每个最大大小的分组运行子任务echo runcommand
。
要将文件中的所有数字作为单独的参数运行命令,可以使用
yourcommand $(some_command | sed 1d)
请注意,这假定您的行都是数字,而不是带有空格和要保留的其他 ascii 字符的字符串。