首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU多变量并行

GNU多变量并行
EN

Stack Overflow用户
提问于 2021-07-01 06:24:28
回答 1查看 65关注 0票数 2

我刚开始使用gnu-parallel。我正在尝试用几个变量进行并行输入。假设我有一个包含以下内容的文本文件(foo.txt),

代码语言:javascript
复制
> cat foo.txt
a b c
d e f

现在,如果我运行下面的命令,

代码语言:javascript
复制
> range=$(eval echo {10..15})
> parallel -a foo.txt --colsep=' ' echo {} {#} {1} {2} {3} ::: $range

而不是得到,

代码语言:javascript
复制
10 1 a b c
11 2 a b c
12 3 a b c
13 4 a b c
14 5 a b c
15 6 a b c
10 7 d e f
11 8 d e f
12 9 d e f
14 11 d e f
15 12 d e f
13 10 d e f

我明白了,

代码语言:javascript
复制
a b c 10 1 a b c
a b c 11 2 a b c
a b c 12 3 a b c
a b c 13 4 a b c
a b c 14 5 a b c
a b c 15 6 a b c
d e f 10 7 d e f
d e f 11 8 d e f
d e f 12 9 d e f
d e f 14 11 d e f
d e f 15 12 d e f
d e f 13 10 d e f

我怎么才能做得对呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-01 06:35:40

{}是完整的输入行,它由所有输入源的笛卡尔乘积生成-文件的行和命令行参数。如果你只想要每一行的数字部分,它最终是第四列,你必须像引用其他列一样引用它:

代码语言:javascript
复制
$ range=( {10..15} )
$ parallel -a foo.txt --colsep=' ' echo {4} {#} {1} {2} {3} ::: "${range[@]}"
10 1 a b c
11 2 a b c
12 3 a b c
13 4 a b c
14 5 a b c
15 6 a b c
10 7 d e f
11 8 d e f
12 9 d e f
13 10 d e f
14 11 d e f
15 12 d e f

还要注意,对范围变量使用数组,以避免出现难看的eval echo

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68202217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档