【发布时间】:2015-06-25 13:21:54
【问题描述】:
如果我有以下情况:
$ printf '%s\n' "${fa[@]}"
1 2 3
4 5 6
7 8 9
其中每一行都是一个新的数组元素。我希望能够通过空格分隔符拆分元素并将结果用作 3 个单独的参数并通过管道输入 xargs。
例如第一个元素是:
1 2 3
我想在使用 xargs 的地方将 1、2 和 3 传递到一个简单的 echo 命令中,例如:
$ echo $0
1
4
7
$ echo $1
2
5
8
$ echo $2
3
9
6
所以我一直在尝试通过以下方式做到这一点:
printf '%s\n' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -d' ' -n 3 bash -c 'echo $0'
给出:
1
2
3 4
5
6 7
8
9 10
除了奇怪的行顺序之外 - 尝试xargs -d' ' -n 3 bash -c 'echo $0' 不会打印出每行的第一个“元素”,即
$ echo $0
1
4
7
而是将它们全部打印出来。
我要问的是,对于每个元素,如何将行拆分为可以通过 xargs 引用的三个单独的参数?
谢谢!
【问题讨论】:
-
出于好奇,输出中的
10是从哪里来的? -
输入文件实际上更长(更长!),虽然相同的三列格式。为了方便解释问题,我把它删掉了。
标签: bash parallel-processing xargs