尝试使用粘贴命令对压缩文件使用进程替换时出现错误。
我正在尝试打开100个压缩文件并粘贴第二列。
当我尝试:
for name in $(ls FILEPATH/*.gz); do
temp=${temp}" <(zcat "${name}" | cut -f2)"; done
paste ${temp} > DESTINATION/OUTPUTNAME'
我收到错误
paste: invalid option -- f
当我尝试粘贴$(echo ${temp})
而不是paste ${temp}
时,我遇到了同样的问题,但当我echo ${temp}
进入我的终端并手动将响应复制并粘贴到粘贴中时,它可以正常工作
请帮我解决这个问题。
答案 0 :(得分:0)
好的,我怀疑正在发生的事情是:
temp变量会扩展为从gzip压缩文件中检索到的文件名列表。
如果字符串' - '存在,它告诉粘贴它应该停止解析选项的命令行,并且 - 后面的所有内容都是要使用的文件。
如果其中一个文件名启动-f则会出现错误。
试
paste -- ${temp} > DESTINATION/OUTPUTNAME
编辑:
从下面的评论看,好像你的bash版本支持重定向。
原始错误是由cat的-f2标志引起的。
试 echo&lt;(ls)
如果你得到像/ dev / fd这样的结果然后处理替换工作,我对发生的事情感到困惑,但我怀疑你不会得到它。
答案 1 :(得分:0)
问题是您无法嵌入shell语法,例如“&lt;(...)”和“|”在字符串中,因为在参数扩展发生之前识别命令行的那些部分。您放在temp
中的所有内容都被视为paste
的简单字符串参数。
没有简单的方法来完成你的尝试。我不愿意提及它,但我认为你需要使用eval
:
# Simpler than writing a loop
printf -v temp "<( zcat %s | cut -f2) " FILEPATH/*.gz
eval "paste $temp > DESTINATION/OUTPUTNAME"