我有2个带有几行的文本文件。我想删除文件1示例中没有文本的文件1中的所有行:
文件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
文件2
2345678
2345679
我需要在file1中结束此操作
2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
我必须在bash脚本中执行此操作,使用sed,awk等。我已经尝试过了,但是没有用
打印文件1中的所有记录
awk 'NR==FNR{a[$0];next} !($0 in a)' file2 file1
仅打印文件2
awk 'NR!=FNR{a[$0];next} !($0 in a)' file2 file1
如果文件已经通过密钥排序,则这是标准解决方案
$ 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句