我试图找到一种基于一对参数循环动作的有效方法,例如(a,b,c,d,e,f ......等)和(1,2,3,4,5,.....等)。脚本应循环遍历给定的文件文件夹,查找匹配的文件名并相应地执行操作。但是,$ dir1,$ dir2,$ dir3 ...等没有基于文件名的固定命名模式,我可以为每个循环动态生成。我有一个预定义的文件名字符串列表,以及它们对应的hdfs文件夹位置。
有人可以帮助建议一个更好的方法,以便我可以在循环中执行相同的操作,而不是重写每个案例的共同操作吗?
下面的是一个伪代码片段示例 示例输入文件及其相应的目录:
BATMAN_JOKER_SUPERMAN.txt >>> $dir1
BATMAN_HARLEYQUIN_SUPERMAN.txt >>> $dir2
BATMAN_DEADSHOT_SUPERMAN.txt>>> $dir3
假设声明了所有变量
for filename in $(ls $home_dir| grep $ProcessDate | grep global)
do
fname=$(sed 's|`\(.*BATMAN_ *\)\(.*\)\( *_SUPERMAN.*\)$|\2|g' <<< $filename)
case "$fname" in
JOKER)
#lots of actions that are common to each file
hadoop fs -copyFromLocal $filename $dir1
;;
HARLEYQUIN)
#lots of actions that are common to each file
hadoop fs -copyFromLocal $filename $dir2
;;
DEADSHOT)
#lots of actions that are common to each file
hadoop fs -copyFromLocal $filename $dir3
;;
esac
done;
答案 0 :(得分:0)
你可以试试这种方式
case "$fname" in
*JOKER*)
...
;;
*HARLEYQUIN*)
...
;;
*DEADSHOT*)
...
;;
esac