无法使用 while 循环,因为它需要时间,有没有更快的方法来获取最终文件..在 Linux

无法使用 while 循环,因为它需要时间,有没有更快的方法来获取最终文件..在 Linux
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,然后打印这一行。

相关内容