以下文件运行,但没有执行任何操作,但也没有错误......
while read dates; do ./avg_hrly_all_final.sh ${dates}; done < ./dates_all.csv
我在“dates_all.csv”中有一个日期列表,其形式如下:
2005 01
2005 02
2005 03
我调用的脚本“avg_hrly_all_final.sh”通过向其传递 2 个位置参数来工作,例如:
./avg_hrly_all_final.sh 2005 01
跟进
xargs -n2 ./the_script.sh <./dates_to_pass.csv
OR
while read dates; do ./the_script.sh ${dates}; done <./dates_to_pass.csv
工作,只需确保传递的文件的日期与您运行命令的机器所期望的“行尾”类型相同;)
答案1
这可能是以下人员的工作xargs
:
printf %s\\n '#!/bin/sh' 'printf "<%s>\n" "$$" "$@"' >avg_hourly.sh
chmod +x ./avg_hourly.sh
xargs -n2 ./avg_hourly.sh <<\IN
2005 01
2005 02
2005 03
IN
xargs
默认情况下将按空格分割,并在每个-n2
出现的参数时调用一次指定的命令。我只是在那里写了一个小虚拟avg_hourly.sh
脚本,它每行打印一个参数,在两端以相同的格式分隔<
并遵循其 PID。>
以上打印:
<1115>
<2005>
<01>
<1116>
<2005>
<02>
<1117>
<2005>
<03>
...只是为了演示。不过,您可能应该使用<./dates_all.csv
而不是我的<<\IN
此处文档作为输入。
答案2
如果你有 GNU Parallel,你可以这样做:
parallel --colsep ' ' ./avg_hrly_all_final.sh {1} {2} :::: ./dates_all.csv
如果 csv 文件的第一行是标题,您可以执行以下操作:
parallel --header : --colsep ' ' ./avg_hrly_all_final.sh {Year} {Month} :::: ./dates_all.csv
GNU Parallel 是一个通用并行器,可以轻松地在同一台计算机或多台您可以通过 ssh 访问的计算机上并行运行作业。
如果您想要在 4 个 CPU 上运行 32 个不同的作业,则并行化的直接方法是在每个 CPU 上运行 8 个作业:
相反,GNU Parallel 在完成后会生成一个新进程 - 保持 CPU 处于活动状态,从而节省时间:
安装
如果您的发行版未打包 GNU Parallel,您可以进行个人安装,不需要 root 访问权限。这样做可以在 10 秒内完成:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
对于其他安装选项,请参阅http://git.savannah.gnu.org/cgit/parallel.git/tree/README
了解更多
查看更多示例:http://www.gnu.org/software/parallel/man.html
观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
浏览本教程:http://www.gnu.org/software/parallel/parallel_tutorial.html
注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel