2017-11-06 14 views
0

あなたが作業しているファイルをbashで上書きできるかどうか疑問に思っていましたか?私はソートされた単語を持っていて、それを通してループしています。私が単語を見つけたら、私は& &をfile2に保存したいのですが、||それをfile1から削除するが、次回の反復では私はファイルの更新版を使いたい。作業中のファイルを上書きすることはできますか?

while read word; do 
    [[string1==string2]] && echo something || delete word from file 
    done <file1> file2 

私は|| sed -i -e 's/$word//g' file1を使用しようとしましたが動作しませんでした。これは、奇妙な名前のファイルを作成し、現在のファイルを更新しません。 アイデア

+0

あなたは '$ word'を一重引用符で囲んでいますので、そこに変数置換を行いません。 – Jack

+0

ここで私は何をしますか?二重引用符と$単語を一重引用符で囲んでみたところ、うまくいきませんでした。 – Matt

+0

'$ word'は一重引用符で囲むことはできません。あなたは何をしようとしていますか? 'string1'と' string2'とは何ですか? – Jack

答えて

0

あなたは1

grep -xvFf keys file > file_keys_removed 

grep -xFf keys file > file_keys_only 

またはawkと1回のショットで1以外卸他にこれらを行うことができます。

awk 'NR==FNR {a[$0]; next} 
      {f=FILENAME "_keys_" (($0 in a)?"only":"removed"); 
       print > f}' keys file 
+0

私は、単語==単語| rev is false – Matt

+0

明示的なループは必要ありません。たとえば、 'awk'はすべてのレコードを調べて、あなたのために1つずつ比較します。おそらく、私はその質問を誤解したでしょう。必要なアクションを説明し、提案されたスクリプトをテストするために、サンプル入力ファイルを用意することが常に役立ちます。 – karakfa

0

私は、これはあなたがやりたいだろうと思う:

for word in $(cat file1 | tr ' ' '\n' | sort -u); do 
    drow=$(rev <<< "$word") 
    if [ "$word" == "$drow" ]; then 
     echo something >> file2 
     echo "$word" >> tmp$$ 
    fi 
done 
mv tmp$$ file1 

上記のコードはFILE1さんは、元の順序にされていないになります。ソートされます。

関連する問題