从文件中删除行--awk

从文件中删除行--awk,awk,Awk,例如,我有一个包含数字的文件file.dat 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'BEGIN{while((getline x0)a[x]=0;

例如,我有一个包含数字的文件
file.dat

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'BEGIN{while((getline x<“/file.dat”)>0)a[x]=0;}NR位于{next;}1'/path/to/other/file中

你能推荐一些更优雅的吗?

使用
NR==FNR
测试哪个文件
awk
正在读取:

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

  • 将索引放入
    idx.txt
  • 将数据放入
    data.txt

使用
NR==FNR
测试哪个文件
awk
正在读取:

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

  • 将索引放入
    idx.txt
  • 将数据放入
    data.txt

    • 我会使用sed而不是awk:

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

      $sed$(对于$中的i(我将使用sed而不是awk:

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

      $sed$(用于输入i)$(您可以在第一个操作中使用
      next
      来避免将
      NR!=FNR
      用作第二个模式。@JaypalSingh,好主意。谢谢您可以在第一个操作中使用
      next
      来避免将
      NR!=FNR
      用作第二个模式。@JaypalSingh,好主意。谢谢
      sed/*/'idx.txt;sed-f-file.txt
      稍微不忙。
      sed的/*/&d/'idx.txt | sed-f-file.txt
      可能稍微不忙。