使用 xargs 将行拆分为 3 个单独的参数
Split line into 3 separate arguments using xargs
如果我有以下情况:
$ printf '%s\n' "${fa[@]}"
1 2 3
4 5 6
7 8 9
其中每一行都是一个新的数组元素。我希望能够通过 space 分隔符拆分元素并将结果用作 3 个单独的参数并通过管道传输到 xargs.
例如第一个元素是:
1 2 3
在使用 xargs 的地方,我想将 1
、2
和 3
传递到一个简单的 echo 命令中,例如:
$ echo [=12=]
1
4
7
$ echo
2
5
8
$ echo
3
9
6
所以我一直在尝试通过以下方式进行此操作:
printf '%s\n' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -d' ' -n 3 bash -c 'echo [=13=]'
给出:
1
2
3 4
5
6 7
8
9 10
除了奇怪的行顺序 - 尝试 xargs -d' ' -n 3 bash -c 'echo [=19=]'
不会打印出每行的第一个 "element" 即
$ echo [=15=]
1
4
7
而是全部打印出来。
我要问的是,对于每个元素,我如何将该行拆分为三个可以通过 xargs 引用的单独参数?
谢谢!
你走的方向是对的
声明一个数组:
fa=('1 2 3' '4 5 6' '7 8 9')
实现你想要的:
printf '%s\n' "${fa[@]}" | xargs -n 3 sh -c 'echo call_my_command --arg1="" --arg2="" --arg3=""' argv0
这将向您回显以下几行(相应地更改传递给 xargs 的命令)
call_my_command --arg1=1 --arg2=2 --arg3=3
call_my_command --arg1=4 --arg2=5 --arg3=6
call_my_command --arg1=7 --arg2=8 --arg3=9
如果我只是添加您的答案并稍微更改一下,我们将得到以下结果
printf '%s\n' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -n 3 bash -c 'echo [=13=] '
注意 xargs 中缺少 -d' ',此选项在某些版本的 xargs 中不可用。
如果我有以下情况:
$ printf '%s\n' "${fa[@]}"
1 2 3
4 5 6
7 8 9
其中每一行都是一个新的数组元素。我希望能够通过 space 分隔符拆分元素并将结果用作 3 个单独的参数并通过管道传输到 xargs.
例如第一个元素是:
1 2 3
在使用 xargs 的地方,我想将 1
、2
和 3
传递到一个简单的 echo 命令中,例如:
$ echo [=12=]
1
4
7
$ echo
2
5
8
$ echo
3
9
6
所以我一直在尝试通过以下方式进行此操作:
printf '%s\n' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -d' ' -n 3 bash -c 'echo [=13=]'
给出:
1
2
3 4
5
6 7
8
9 10
除了奇怪的行顺序 - 尝试 xargs -d' ' -n 3 bash -c 'echo [=19=]'
不会打印出每行的第一个 "element" 即
$ echo [=15=]
1
4
7
而是全部打印出来。
我要问的是,对于每个元素,我如何将该行拆分为三个可以通过 xargs 引用的单独参数?
谢谢!
你走的方向是对的
声明一个数组:
fa=('1 2 3' '4 5 6' '7 8 9')
实现你想要的:
printf '%s\n' "${fa[@]}" | xargs -n 3 sh -c 'echo call_my_command --arg1="" --arg2="" --arg3=""' argv0
这将向您回显以下几行(相应地更改传递给 xargs 的命令)
call_my_command --arg1=1 --arg2=2 --arg3=3
call_my_command --arg1=4 --arg2=5 --arg3=6
call_my_command --arg1=7 --arg2=8 --arg3=9
如果我只是添加您的答案并稍微更改一下,我们将得到以下结果
printf '%s\n' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -n 3 bash -c 'echo [=13=] '
注意 xargs 中缺少 -d' ',此选项在某些版本的 xargs 中不可用。