2016-02-19 162 views
0

我想比較從csv文件中讀取的字符串是否存在條件。下面是我寫的代碼示例:比較從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" 

下面是CSV文件:

1~sat~enjoy 
2~sun~enjoy 
3~mon~work 
4~tue~work 
5~sun~enjoy 

下面是我得到的輸出:需要以下輸出,而不是

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 

任何想法如何t做到這一點?

+0

感謝縮進代碼! –

+0

你正在使用哪個外殼?擊? Bourne shell? –

+0

帶\ r結尾的csv文件?嘗試使用'dos2unix'或'tr -d「\ r」'來轉換您的csv文件。也許你可以把'done <「$ 1」'改成'done <<(tr -d「\ r」<「$ 1」)''。 –

回答

0

嘗試

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" 

不使用"$foo"=="$bar"如bash將只能看到一個令牌。

你也可以嘗試

case "$b" in 
sat) echo "It's saturday" ;; 
sun) echo "It's sunday" ;; 
*) echo "It's weekday" ;; 
esac 
echo $c 
+0

這兩個解決方案的工作。謝謝 – Pramod

相關問題