Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 删除文件中与其他文件中的文本不匹配的所有行_Bash_Awk_Sed - Fatal编程技术网

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

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中的所有记

我有两个文本文件,有几行。 我想删除文件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
仅打印文件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