脚本不在Bash中的基本MapReduce中运行的脚本问题



我正在尝试在bash中创建一个基本的mapReduce函数(我很新)。我目前有两个脚本,job_master.sh和map_function.sh。我正在尝试将映射功能从作业主运行以从数据文件中删除,如果它不存在,则将其发送到键,但是如果它确实将其发送到该名称的文件。当我以文件为参数单独运行Job_master脚本或MAP_FUNCTICT脚本时,什么都不会发生。在我将if语句添加到map_function中之前,它正在工作。

如果有人能够发现它们为什么不运行,我已经在下面包含了两个代码。我尝试包括用于测试的Echo语句,但它没有在Job_master脚本中输入循环,也不会在MAP_FUNCTICT脚本中执行任何操作。

map_function

#!/bin/bash
while IFS="," read -r date prod remainder; do
        if [ ! -e "$prod" ];
        then
                echo $prod >> keys
        else
                echo $prod >> $prod
        fi
done

job_master

#!/bin/bash
files=$(ls | egrep 'sales_a*')
for elem in $files ; do
        ./map_function.sh $elem
done

地图功能脚本正在等待输入。看看这个:

while IFS="," read -r date prod remainder; do
    # ...
done

read在哪里获取输入?它正在等待stdin,但您不会传递任何东西。

另一方面,我看到您正在调用地图功能脚本:

./map_function.sh $elem

也就是说,您正在传递命令行参数。但是地图函数脚本不使用该参数。看来您想将$elem的内容重定向到脚本的stdin。这样写:

for elem in sales_a*; do
    ./map_function.sh < "$elem"
done

这还解决了您在脚本中遇到的其他问题。files=$(ls | grep 'sales_a*')看起来很笨拙,这是迭代文件上的一种不合适的方法。

最新更新