2016-05-17 68 views
0

スクリプトを実行しているときにそれを実行すると、次のようになります。 [[行==一時]]に関する予期しないファイルの終了。 私はファイルから行を読み込み、ファイル内のすべての繰り返しを削除しようとしています。 cleanFilesはあなたがifの後にスペースを追加するために必要なすべての空行予期しないファイルの終了(スクリプトが動作しません)

while read line; do 
    while read temp; do 
     if[[ line == temp ]]; then 
      temp=" "; 
     fi 
    done 
./cleanLines $1 
done 
+0

これを使うことができます: 'cat file_name.txt | uniq >> output.txt' – ryekayo

+2

ご覧ください:http://www.shellcheck.net/ – Cyrus

+1

@ryekayo:もっと簡単に言うと、 'uniq file_name.txt >> output.txt'です。 Omer:隣接する繰り返しのみ、またはすべての繰り返しを削除しますか?入力が 'foo'、' bar'、および 'foo'の3行からなる場合は、' foo'の両方の出現を出力しますか? –

答えて

3

を削除します。

if[[ line == temp ]]; then # wrong 
if [[ line == temp ]]; then # still wrong, but see below 

しかし、まだリテラル文字列linetempを比較しています。 "$temp"上の二重引用符はグロブパターンとして解釈されることを防ぐ

if [[ "$line" == "$temp" ]]; then # right 

;:あなたは、変数の値を参照したい場合は、$兆候を必要としますまた、対称性のために二重引用符を"$line"に追加しました。

+0

@Jahid:良いキャッチ、固定。 –

+0

ねえ、助けてくれてありがとう。私はそれが動作するかどうかを確認し、あなたに知らせるでしょう。 –

+0

@OmerEliyahu:ようこそ。 (BTW、いつもの感謝の表明方法は、答えをアップアップしたり受け入れたりすることです*もし*あなたがそれが良い答えだと思っていたり、あなたの問題を解決しているのならば) –

0

私が持っている別の質問ですね。私はbashで新しく、いくつかのファイルを結合し、繰り返しを取り除き、アルファベット順にソートする必要があります。一時ファイルを使用することはできません。エコーを行っているCleanLinesスクリプト。それをマージしてリピートしてリピートをリダイレクトしてリピートをリダイレクトし、最後にスクリプトをソートするようにリダイレクトすることができます。それを行うのが一番簡単な方法ですか?

関連する問題