假设我有三个输入文件,如下所示:
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