cat joined.txt | xargs -t -a <(cut --fields=1 | sort -u | grep -E '\S') -I{} --max-args=1 --max-procs=4 echo "mkdir -p imdb/movies/{}; grep '^{}' joined.txt > imdb/movies/{}/movies.txt" | bash
上面的代码可以工作,但是在代码开头用冗余的cat替换下面的重定向并不起作用,导致切换输入输出错误。
< joined.txt xargs -t -a <(cut --fields=1 | sort -u | grep -E '\S') -I{} --max-args=1 --max-procs=4 echo "mkdir -p imdb/movies/{}; grep '^{}' joined.txt > imdb/movies/{}/movies.txt" | bash
答案 0 :(得分:2)
在任何一种情况下,进程替换中的cut
命令(而不是xargs
)应该从joined.txt
读取,所以为了完全安全,你应该放进程替换中的管道或输入重定向。实际上,两者都没有必要; cut
可以将joined.txt
作为参数。
xargs -t -a <( cat joined.txt | cut ... ) ... | bash
或
xargs -t -a <( cut -f1 joined.txt | ... ) ... | bash
但是,最简单的做法是完全跳过进程替换,并将该管道的输出传递给xargs
:
cut -f joined.txt | sort -u | grep -E '\S' | xargs -t ...