cat file_1.txt
100 200 name
100 200
100 200
150 300
150 300
150 250
150 250
150 300 name
final file should be
150 300
150 300
150 250
150 250
我正在使用这个命令
cat file_1.txt | grep -v "name">file_2.txt; cat file_2.txt| while read line;do cat file_1.txt| grep "$line"| head -1|grep -v "name" ;done
但数据太多,无法使用 while 循环,它需要花费很多时间 cat 使用 while 循环。有没有其他方法可以快速做到这"grep -vf file_1 file_2"
一点,例如使用类似的方法通过这样的方式。请告诉我。
在这里,我使用的逻辑是获取模式的最上面一行,发现模式是每一行"file_1.txt"
答案1
在我看来,您的代码正在打印 file_1.txt 的每一行,除非(a)该行包含name
或(b)该行的前两列与包含 的前一行相同name
。在这种情况下,请尝试:
$ awk '/name/{bad[$1,$2];next} !(($1,$2) in bad)' file_1.txt
150 300
150 300
150 250
150 250
怎么运行的
/name/{bad[$1,$2];next}
如果当前行包含,则我们在前两列的键下
name
向关联数组添加一个条目。bad
然后我们跳过其余的命令并跳转到线上重新开始next
。!(($1,$2) in bad)
如果当前行的前两列
$1,$2
是不是的键中bad
,然后打印这一行。