Bash 删除文件中与其他文件中的文本不匹配的所有行
我有两个文本文件,有几行。 我想删除文件1中没有文件2中文本的所有行 例如: 文件1 文件2 我需要在文件1中以这个结束Bash 删除文件中与其他文件中的文本不匹配的所有行,bash,awk,sed,Bash,Awk,Sed,我有两个文本文件,有几行。 我想删除文件1中没有文件2中文本的所有行 例如: 文件1 文件2 我需要在文件1中以这个结束 2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP awk 'NR==FNR{a[$0];next} !($0 in a)' file2 file1 我必须在bash脚本中使用sed、awk等等来完成这项工作。 我已经试过了,但不起作用 打印文件1中的所有记
2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
awk 'NR==FNR{a[$0];next} !($0 in a)' file2 file1
我必须在bash脚本中使用sed、awk等等来完成这项工作。
我已经试过了,但不起作用
打印文件1中的所有记录
2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP
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
如果文件已按键排序,则这是标准解决方案
$ 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
为什么
awk
?改用grep
:
grep -f file2 file1
为什么
awk
?改用grep
:
grep -f file2 file1
我认为grep不适合这个任务任何反对
grep
的参数?好的,例如,在文件1中我有一行:sdfsdfsf2345678 10.00 dirfkdkfsdf XP
我认为grep不适合这个任务任何反对grep
的参数?好的,例如,在文件1中我有一行:sdfsdfsfsfsff 2345678 10.00 dirfkdkfsdf XP
嗨,awk工作得很好,但是如果我想在file1的第3列而不是第一列中捕捉到file2的匹配,那将是一个不同的问题,输入/输出不同。对于join版本,您必须指定-j3
,对于awk
将$1
s更改为$3
您好,awk工作得很好,但是如果我想在file1的第3列而不是第一列中捕捉到file2的匹配项,这将是一个不同输入/输出的问题。对于加入版本,您必须指定-j3
,对于awk
将$1
s更改为$3