UNIX,将 File3 的第一个字段与 File 2 的第一个字段进行比较

UNIX,将 File3 的第一个字段与 File 2 的第一个字段进行比较

假设我有三个输入文件,如下所示:

File 1
 1001 1 2 3 
 1002 4 5 6 
 1003 7 8 9
 1004 10 11 12 

File 2
 1001 11 22 33 
 1002 44 55 66
 1004 100 111 122  

File 3
 1001 111 222 333 
 1004 130 141 152  

我想将文件 3 的第一个字段与文件 2 的第一个字段进行比较。如果文件 2 中的某个特定第一个字段在文件 3 中不存在,那么我想删除文件 2 中的整行。

例如,文件 2(=1002)第 2 行的第一个字段在文件 3 中不存在。因此,我想删除文件 2 中的这一行并保存它。

现在我想比较文件 3 和文件 1。我们发现文件 1 的第二行(=1002)的第一个字段和第三行(=1003)的第一个字段在文件 3 中不存在。

我想从文件 1 中删除这两行并保存。

经过上述步骤后,三个文件的结果如下:

File 1
 1001 1 2 3
 1004 10 11 12  

File 2
 1001 11 22 33
 1004 100 111 122 

 File 3
 1001 111 222 333 
 1004 130 141 152 

答案1

使用 Awk:

awk 'NR==FNR {a[$1]++; next} $1 in a {print > FILENAME ".tmp"}' File3 File2 File1

进而

mv File1.tmp File1
mv File2.tmp File2

如果你有足够新的 GNU Awk 版本(又名gawk),那么你可以这样做:

awk -i inplace 'NR==FNR {a[$1]++} !($1 in a) {next} 1' File3 File2 File1

前任。

$ awk -i inplace 'NR==FNR {a[$1]++} !($1 in a) {next} 1' File3 File2 File1

$ head File{1..3}
==> File1 <==
 1001 1 2 3 
 1004 10 11 12

==> File2 <==
 1001 11 22 33 
 1004 100 111 122

==> File3 <==
 1001 111 222 333 
 1004 130 141 152  

相关内容