2012-01-08 4 views
0

私は数字を含むファイルfile.datを持っているが、たとえば削除ライン - awkの

4 
6 
7 

のために私は別のファイルの行を削除するには、このファイルの番号を使用したいと思います。

この数値をawkのパラメータとして渡し、別のファイルのこれらの行を削除する方法はありますか?

私はこのawk解決策を持っていますが、あまりそれを好きではない...

awk 'BEGIN { while((getline x < "./file.dat") > 0) a[x]=0; } NR in a { next; }1' /path/to/another/file 

あなたはよりエレガントな何かを提案することはできますか?読んでいるどのファイルawkテストするNR==FNRを使用して

答えて

4

idx.txt

  • $ awk '{if(NR==FNR)idx[$0];else if(!(FNR in idx))print}' idx.txt data.txt 
    

    それとも

    $ awk 'NR==FNR{idx[$0]; next}; !(FNR in idx)' idx.txt data.txt 
    
    • プット指標はdata.txt
    にデータを入れます
  • +1

    あなたは第二のパターンとして、 'NR = FNR'を使用しないようにあなたの最初のアクションで' next'を使用することができます!。 –

    +0

    @JaypalSingh、素晴らしいアイデア。ありがとう – kev

    1

    私はawkをするのではなく、sedを使用します。

    $ sed $(for i in $(<idx.txt);do echo " -e ${i}d";done) file.txt 
    
    +0

    'sed 's /.*/& d /' idx.txt | sed -f-file.txt'は少し忙しいかもしれません。 – potong

    関連する問題