Shell 比较从csv文件读取的字符串

Shell 比较从csv文件读取的字符串,shell,unix,Shell,Unix,我试图在if条件下比较从csv文件读取的字符串。下面是我编写的示例代码: export IFS="~" while read a b c do echo "line Num:$a" if [ "$b"=="sat" ];then echo "Its saturday" echo $c elif [ "$b"=="sun" ];then echo "Its sunday" echo $c else

我试图在if条件下比较从csv文件读取的字符串。下面是我编写的示例代码:

export IFS="~"
while read a b c
do
    echo "line Num:$a"
    if [ "$b"=="sat" ];then
        echo "Its saturday"
        echo $c
    elif [ "$b"=="sun" ];then
        echo "Its sunday"
        echo $c
    else
        echo "Its weekday"
        echo $c
    fi
done < "$1"
下面是我得到的输出:

line Num:1
Its saturday
enjoy
line Num:2
Its saturday
enjoy
line Num:3
Its saturday
enjoy
line Num:4
Its saturday
enjoy
line Num:5
Its saturday
enjoy
需要以下输出:

line Num:1
Its saturday
enjoy
line Num:2
Its sunday
enjoy
line Num:3
Its weekday
work
line Num:4
Its weekday
work
line Num:5
Its sunday
enjoy
你知道如何做到这一点吗?

试试看

export IFS="~"
while read a b c
do
echo "line Num:$a"
if [ "$b" = "sat" ];then
echo "Its saturday"
echo $c
elif [ "$b" = "sun" ];then
echo "Its sunday"
echo $c
else
echo "Its weekday"
echo $c
fi
done < "$1"

谢谢你缩进代码!你用的是哪个外壳?猛击?Bourne shell?带结尾的csv文件?尝试使用
dos2unix
tr-d“\r”
转换您的csv文件。也许您可以将
done<“$1”
更改为
done<
export IFS="~"
while read a b c
do
echo "line Num:$a"
if [ "$b" = "sat" ];then
echo "Its saturday"
echo $c
elif [ "$b" = "sun" ];then
echo "Its sunday"
echo $c
else
echo "Its weekday"
echo $c
fi
done < "$1"
case "$b" in
sat) echo "It's saturday" ;;
sun) echo "It's sunday" ;;
*) echo "It's weekday" ;;
esac
echo $c