我有两个文件,但其中的数据和空格字符的格式不同。
我想比较这两个文件,如果file1中每行的前三列与file2类似,我想从file2中删除这些行,并将file2的其余部分保存在file2中。
例如:
file1:
4775.00 5215.28 23.9655 7 2.54766
4568.06 5611.74 22.0619 56 2.36560
file2:
6944.69 5605.22 22.6416 44 2.31929 0.914626
1619.15 5597.93 23.7979 12 2.38169 0.684619
5986.66 5599.89 23.8822 6 2.99171 0.384949
4568.06 5611.74 22.0619 56 2.36560 0.973764
1365.00 5601.16 23.3325 15 3.78138 0.212834
1787.81 5209.01 23.4643 8 3.34705 0.486087
5287.90 5244.40 21.9990 104 5.28082 0.000269982
4775.00 5215.28 23.9655 7 2.54766 0.467107
9024.54 5235.34 21.0784 120 3.13061 0.0357055
干杯。
答案 0 :(得分:0)
我需要时转发它。同时这是一个解决方案:
#!/usr/bin/awk -f
FNR == NR {
a[$1] = NR
b[$2] = NR
c[$3] = NR
next
}
$1 in a {
t = a[$1]
if (b[$2] == t && c[$3] == t) {
next
}
}
{
r[++i] = $0
}
END {
for (j = 1; j <= i; ++j) {
print r[j] > ARGV[2]
}
}
警告:它会根据需要直接修改文件。
用法:
awk -f script.awk file1 file2
示例结果:
6944.69 5605.22 22.6416 44 2.31929 0.914626
1619.15 5597.93 23.7979 12 2.38169 0.684619
5986.66 5599.89 23.8822 6 2.99171 0.384949
1365.00 5601.16 23.3325 15 3.78138 0.212834
1787.81 5209.01 23.4643 8 3.34705 0.486087
5287.90 5244.40 21.9990 104 5.28082 0.000269982
9024.54 5235.34 21.0784 120 3.13061 0.0357055
如果您不想直接修改第二个文件,请不要在最后一部分使用重定向:
END {
for (j = 1; j <= i; ++j) {
print r[j]
}
}