3

このスクリプトでやりたいことを実行できません。テキストファイルを1行ずつ読み取り、結果を別のファイルにエコーすることになっているのを誰かが助けることができますか? しかし、空白行を認識していません。空白でない限り行を印刷することになっているので、ファイルに印刷することを想定しています。

iname = checktest
while read line           
do  

if [ "$line" == "" ];
then
    echo "<blank>" >> $iname2.txt

else    
  echo "$line"  >> $iname2.txt
fi

done <$iname.txt
4

3 に答える 3

7

bash では、変数の割り当ての間にスペースを入れることはできません。

#!/bin/bash

iname=checktest  #Should be no space between = sign
while read line; do  
    if [ -z "$line" ]; then
        echo "I saw an empty line ... will report this"
    else    
        echo "$line"  
    fi
done <"$iname".txt > newfile.txt

また、>ループの終了後に使用します。これにより、各ループ サイクル中に書き込み用にファイルを開く不要な I/O が防止されます。

于 2013-06-12T17:54:56.087 に答える
1

次のように編集します。

iname = チェックテスト

 while read line
 do 
if [ -z "$line" ]
 then echo "" >> ${iname}2.txt
  else
 echo "$line" >> ${iname}2.txt
 fi
done  < ${iname} ;

これでうまくいくはずです。これが役立つことを願っています...

于 2013-06-12T17:43:37.273 に答える
-1
iname = checktest
while read line           
do  

if [ "$line" != "" ];
then
    echo $line >> 
fi

done < $iname > ${iname}2.txt

一致する場合にのみ何かを行うことは、私にとってより論理的なようです。

于 2013-06-12T18:00:16.060 に答える