Awk 从文件中删除特定的匹配行并转发到输出文件

Awk 从文件中删除特定的匹配行并转发到输出文件,awk,sed,grep,Awk,Sed,Grep,Employee.txt包含以下内容: Tom ID: 101 Bob ID: 102 Harry ID: 103 Martin ID: 106 Kevin ID: 109 Vicky ID: 108 Sam ID: 104 101 106 108 我需要删除input.txt中ID为101、106、108的整行内容,并将结果输出到文件output.txt 我已经在remove.txt中给出了要删除的ID。现在,remove.txt具有以下功能: Tom ID: 101 Bob ID: 10

Employee.txt包含以下内容:

Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
101
106
108
我需要删除input.txt中ID为101、106、108的整行内容,并将结果输出到文件output.txt

我已经在remove.txt中给出了要删除的ID。现在,remove.txt具有以下功能:

Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
101
106
108
现在我应该得到如下输出:

Bob ID: 102
Harry ID: 103
Kevin ID: 109
Sam ID: 104
到目前为止,我已经这样做了,但它似乎是不正确的,有人可以帮助吗

for i in `cat remove.txt`;do sed '/${i}/d' Employee.txt >> output.txt; done
使用GNU sed和bash的:

输出:

Bob ID: 102 Harry ID: 103 Kevin ID: 109 Sam ID: 104 使用GNU sed和bash的:

输出:

Bob ID: 102 Harry ID: 103 Kevin ID: 109 Sam ID: 104 在末尾添加>output.txt以将输出重定向到一个文件,就像对任何其他UNIX命令一样

在末尾添加>output.txt以将输出重定向到文件,就像对任何其他UNIX命令一样。

使用grep:

$ grep -vf remove.txt Employee.txt
Bob ID: 102
Harry ID: 103
Kevin ID: 109
Sam ID: 104
-f表示从文件中读取模式,-v表示反向匹配。使用

grep -vf remove.txt Employee.txt > output.txt
获取文件中的输出

顺便说一句,您的尝试失败有两个原因:

您的sed命令周围有单引号,因此sed尝试逐字匹配${i}。您必须使用sed/${i}/d进行参数扩展。 即使您这样做,输出文件也会如下所示

Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
因为每次调用sed时,它都会遍历整个输入文件

对于grep:

$ grep -vf remove.txt Employee.txt
Bob ID: 102
Harry ID: 103
Kevin ID: 109
Sam ID: 104
-f表示从文件中读取模式,-v表示反向匹配。使用

grep -vf remove.txt Employee.txt > output.txt
获取文件中的输出

顺便说一句,您的尝试失败有两个原因:

您的sed命令周围有单引号,因此sed尝试逐字匹配${i}。您必须使用sed/${i}/d进行参数扩展。 即使您这样做,输出文件也会如下所示

Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
Tom ID: 101
Bob ID: 102
Harry ID: 103
Martin ID: 106
Kevin ID: 109
Vicky ID: 108
Sam ID: 104
因为每次调用sed时,它都会遍历整个输入文件