我有两个包含多行的文本文件。 我想删除文件1中没有文件2中文本的所有行 例如:
文件1
2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345680 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345681 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345682 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
file2的
2345678
2345679
我需要在file1
中结束这个2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
我必须在bash脚本中使用sed,awk,等等。 我试过这个但是没有用
打印file1
中的所有记录awk 'NR==FNR{a[$0];next} !($0 in a)' file2 file1
仅打印file2
awk 'NR!=FNR{a[$0];next} !($0 in a)' file2 file1
答案 0 :(得分:2)
如果文件已按键排序,则这是标准解决方案
$ join file1 file2
2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
不能比这简单。
如果你想要awk
解决方案,那就是
$ awk 'NR==FNR{a[$1];next} $1 in a' file2 file1
2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
答案 1 :(得分:0)
为什么awk
?请改用grep
:
grep -f file2 file1