2016-10-07 16 views
0

シェルスクリプトのループで文字列に接尾辞を連結したいが、その結果、混乱することがある。次のようにシェルスクリプトは次のとおりです。シェルスクリプトのループで文字列を連結する

for i in `cat IMAGElist.txt` 
do 
    echo $i 
    echo ${i}_NDVI 
done 

結果は次のとおりです。

LT51240392010131BKT01 
_NDVI40392010131BKT01 
LT51240392010163BKT01 
_NDVI40392010163BKT01 
... 

フロント5つの文字が「_NDVI」と交換しました。 しかし、期待される結果は次のようになります。

LT51240392010131BKT01 
LT51240392010131BKT01_NDVI 
LT51240392010163BKT01 
LT51240392010163BKT01_NDVI 
... 

私は文字列の連結のための方法は、ループ内で右である場合ではないと思います。なぜこの結果が生まれるのか分かりません。

答えて

0

ファイルにWindows形式の行末(改行+改行)が含まれているように見えるため、UNIX形式の行に変換する必要があります。これを行う簡単な方法はツールdos2unixです。

テキストファイルの行を読み取るためにforを使用しないでください:あなたは、このようなAWKやsedのテキストを処理するために設計されたツールで、より効率的に、この結果を達成することができます

while read -r line 
do 
    echo "$line" 
    echo "${line}_NDVI" 
done < IMAGElist.txt 

注意。

+0

お返事ありがとうございます!あなたのアプローチを試みましたが、結果は元のものと同じです。 –

+0

私の問題はおそらくあなたの入力ファイルの行末であると思います。私は私の答えに追加しました。 –

+0

ありがとう!あなたが正しいです! –