从文件中删除与第二个文件中的行首不匹配的行



我需要匹配两个具有不同值的文件,它们对应于同一个人。这两个文件都是.txt格式,列之间用空格分隔。两个文件的第一列都包含每个人唯一的ID号,但第二个文件中缺少一些人,因此必须从第一个文件中删除。第一个文件如下:

1 value1 value2 value3...  
3 value1 value2 value3...  
10 value1 value2 value3...  
11 value1 value2 value3...

第二个是这样的:

1 valuex valuey valuez...  
10 valuex valuey valuez...  
11 valuex valuey valuez...

我需要从第一个文件中删除以ID 3开头的行(第二行),因为第二个文件中不存在此个体(值value1、value2和value3与valuex、valuey和valuez不同)。我的操作系统是ubuntu。

我设法找到了一个解决方案,但不是一个非常优雅的解决方案。首先,我使用以下方法从两个文件中剪切包含ID的第一列:
cut-d"-f 1输入文件>输出文件

然后我使用grep从这些文件中打印不匹配的ID:
grep-v-w-f file2 file1>ID_list

我在文件的每一行的开头都锚定了^,并列出了不匹配的ID(一位乐于助人的同事的建议)。最后,我使用了:
grep-v-w-f ID_list file1>新文件1

以生成匹配的文件。不漂亮,我相信可以用一种简单得多的方法来完成。但它是有效的。只是想把它放在一个牵强的案例中,说它将来会帮助别人。

最新更新