从文件中删除行--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
可能稍微不忙。