我有一个包含 50000 个文件的文件夹 (file1、file2 ... file49999、file50000),我需要执行此命令:paste file{1..3000} > 1output.txt。如果我将其粘贴到 shell 中并执行它,它会正常工作。
为了避免一直链接序列号,我尝试创建一个 for 循环。
bash# x=1; y=3000; for i in {1..50000}; do paste file{$x..$y} > output.txt; x=$((x+3000)); y=$((y+3000)); done
输出:
paste file{1..3000} > 1output
paste file{3001..6000} > 2output.txt
paste file{6001..9000} > 3output.txt
paste file{9001..12000} > 4output.txt
paste file{12001..15000} > 5output.txt
paste file{15001..18000} > 6output.txt
paste file{18001..21000} > 7output.txt
paste file{21001..24000} > 8output.txt
paste file{24001..27000} > 9output.txt
paste file{27001..30000} > 10output.txt
paste file{30001..33000} > 11output.txt
....
有什么办法可以让它工作吗?
提前致谢。
答案1
扩展steeldriver的评论:
inc=3000
for ((i = 1, k = 1; i <= 50000; i += inc, k += 1)); do
readarray -t files < <(seq -f "file%.0f" $i $((i + inc)))
paste "${files[@]}" > "${k}output.txt"
done