2015-03-31 123 views
-2

我有两个非常巨大的excel文档。比较2个excel文档

下面只是其中的一个数据示例。

文件1包含:

base_id 
bd9ce21c-bc57-4e21-adf9a9693cbc 
5b0a3d79-ff6a-41fd-a28aa6a92164 
b7d80042-1fcf-4661-21d7dd5b1fbd 
B211B098-0544-4CDF-A2F93EAD22A4 
4FB55FE5-AE6A-425F-8B31E345181A 

文献2包含:

path_id     gate_no count text_id 
54ecfc619d1333b86a3a9cd9 3816 0 {"abcd":"50C53378-5833-4827-9C2F-3211D3F42F13" abcd_tub:"831e590de0cc185248f4208fc5d5ee89d2d" abcd_cub:"1537fe51004bae1e71480b154372"} 
54ecfc619d1333b86a3a9cd9 3005 0 {"bolt":"66db1807f1e4a072744a77fd8429b5" mega:"a1cd73b41d6b3eae97dbbdd76e323a44ab5140"} 
54ecfc619d1333b86a3a9cd9 2595 0 {"bolt":"c58634ccdcb5e81eb0b447679b756" mega:"32b74bf7024944b457c69c000e44d43"} 
54ecfc619d1333b86a3a9cd9 2220 0 {"bolt":"acf98549461b87bcfe2c5190d6c" mega:"2c1c788440d85ea70597ce135ccf2316748f"}  
54ecfc619d1333b86a3a9cd9 2160 0 {"abcd":"16F8E7-F395-4551-B8C7-5FC8B" abcd_tub:"a5301e4dfc6bad809a2917f495fc6f7" abcd_cub:"4e5da03ffb35a0f17726acb60c8dc"} 

什么,我需要做的是:

检查是否从文件1 BASE_ID在任何行的存在

如果存在,则获取base_id列表和行

如果不存在,请仅获取base_ids的列表。

什么是在EXCEL中进行上述比较的最佳方法? 如果不是excel,是否有我可以看的样本脚本样本?

任何帮助表示赞赏。

感谢

+1

不确定读取excel格式,但如果您可以将它们保存为csv,您可以使用bash轻松检查。 – 2015-03-31 22:24:15

+1

假设您已经有一种方法来读取excel文件:为什么不解析文档2并将必要的数据存储在字典中,即'var dict = {}',这在匹配第一个文档中的base_id时更容易查找?这种方法的缺点是高内存开销,但我认为这是不可避免的....(除非你的文件被索引/排序) – TimeString 2015-03-31 22:26:23

+0

@ArnonZilca是的我有它的CSV格式。你能推荐一个脚本samle /链接做类似的事吗? – user175084 2015-04-01 15:29:49

回答

1

我以为你的文件看起来完全一样,他们在这个问题(他们可以有逗号,而不是标签 - 但他们需要的文本,而不是在Excel格式)。

这不是很有效,但如果文件不是很长,那应该不重要。
希望我理解你想要什么正确实现:

#!/bin/bash 

set -e 

file1="file1" 
file2="file2" 

for id in $(tail -n+2 "${file1}"); do 
    if ! grep "${id}" "${file2}"; then 
     echo "${id}" 
    fi 
done 

顺便说一下,在你的例子没有base_id S的file2中存在。