特定の行番号を持つファイルに指定された行を削除します。

特定の行番号を持つファイルに指定された行を削除します。

Aテキストファイルから削除したい行番号を含むテキストファイルがありますB。たとえば、ファイルにはA.txt次の行が含まれています。

1
4
5

ファイルB.txtには次の行が含まれています。

A
B
C
D
E

生成されたファイルは次のようになります。

B
C

もちろん手動で行うこともできますが、

sed '1d;4d;5d' B.txt

しかし、行番号を手動で指定せずにこれを行う方法を知りたいです。

ベストアンサー1

awk以下も使用できます。

awk 'NR==FNR { nums[$0]; next } !(FNR in nums)' linenum infile

特別な場合に「linenum」ファイルが空の場合、awkはそれをスキップするため、「infile」行全体を印刷しません。この問題を解決するには、次のコマンドを使用します。

awk 'NR==FNR && FILENAME==ARGV[1]{ nums[$0]; next } !(FNR in nums)' linenum infile

またはより良い(ありがとうスティーブン・チャジェラス):

awk '!firstfile_proceed { nums[$0]; next } 
     !(FNR in nums)' linenum firstfile_proceed=1 infile

おすすめ記事