Arrays 在UNIX中使用数组将文件动态传递给命令
我有四个文件(Arrays 在UNIX中使用数组将文件动态传递给命令,arrays,bash,unix,Arrays,Bash,Unix,我有四个文件(fileone到filefour),这些文件的内容并不重要。我想按数组定义的特定顺序将其中三个文件传递给命令(即粘贴或awk)。 我的数组是顺序=(二一四)。 我希望使用数组将所需文件作为输入传递给命令,就像使用*(即粘贴文件*>组合文件)一样 粘贴文件${order[@]}>组合文件 粘贴文件${order[@]}>组合文件 粘贴文件${order[*]}>组合文件 粘贴文件{${order[@]}}>组合文件 粘贴文件{{${order[@]}}>组合文件 我看了不同的页面(,
fileone
到filefour
),这些文件的内容并不重要。我想按数组定义的特定顺序将其中三个文件传递给命令(即粘贴
或awk
)。
我的数组是顺序=(二一四)
。
我希望使用数组将所需文件作为输入传递给命令,就像使用*
(即粘贴文件*>组合文件
)一样
粘贴文件${order[@]}>组合文件
粘贴文件${order[@]}>组合文件
粘贴文件${order[*]}>组合文件
粘贴文件{${order[@]}}>组合文件
粘贴文件{{${order[@]}}>组合文件
我看了不同的页面(,或),但我无法让它工作。在粘贴
或awk
的情况下,通过文件的循环
不起作用。我想一次将所有文件传递给一个命令。鉴于我的UNIX
知识有限,我可能误解了一些解决方案/答案。从我的理解来看,在bash
中最初是如何开发数组的,可能存在一些问题
所需结果:
粘贴文件\u两个文件\u一个文件\u四个文件>组合文件
您可以在$()内使用for循环:
您可以使用
printf
:
paste $(printf "file_%s " ${order[@]}) > combined_file
这避免了必须循环遍历顺序
数组的所有元素
或者,使用bashism,您可以使用:
paste ${order[@]/#/file_} > combined_file
请注意与bash手册页中提到的模式开头相匹配的#
:
${parameter/pattern/string}
(…)如果模式以#开头,它必须
在参数展开值的开头匹配
执行
粘贴文件*>组合文件
应该可以。你犯了什么错误?我知道,但如果你读了我的问题陈述,那就不是我想要的了。我想要一个特定的订单,而不是所有的文件。我将删除该选项以避免混淆。请看我想要的结果:)我想你的意思是文件\u$i
而不是粘贴\u$i
。但无论如何,谢谢你,这是我想要的。是的,你是对的-真的必须停止在我的手机上回答这些问题!!太棒了,真管用!尽管对于第二个解决方案,如果数组为空或不存在,它似乎会挂起。我使用了错误的数组,似乎要花很长时间才能执行CRTL+C
操作。我喜欢不在阵列中循环的解决方案。因此,我选择这个作为答案。
paste ${order[@]/#/file_} > combined_file