从文件中删除行 - awk

时间:2012-01-08 08:40:44

标签: 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

你能建议一些更优雅的东西吗?

2 个答案:

答案 0 :(得分:4)

使用NR==FNR来测试awk正在阅读的文件:

$ 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
  • 将索引放入idx.txt
  • 将数据放入data.txt

答案 1 :(得分:1)

我会使用sed而不是awk:

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