我有一个包含数字的文件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
你能建议一些更优雅的东西吗?
答案 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