删除文件中与其他文件中的文本不匹配的所有行

时间:2016-04-01 12:43:23

标签: bash awk sed

我有两个包含多行的文本文件。 我想删除文件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

2 个答案:

答案 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