需要检查.CSV的一列与另一个.CSV一列匹配

时间:2018-02-13 18:39:19

标签: python csv awk sed grep

我有一个10,000行左右的CSV。所有一个领域

.000.000.000
.111.111.111
etc

我需要针对400,000左右的行的主列表检查上述内容,再次检查所有一个字段

.0
.1
.3
and up 

最好的方法是什么?我尝试了一个带-f的grep,但我觉得它没有做任何事情

grep -f [file1][file2]

它没有返回任何结果,但我也没有提供我认为需要的输出。

我也试过一个awk,但这只是我发现的东西,并不是真的理解它。所以再一次没有得到我想要的结果。

awk -F, 'NR>1&&NR==FNR{a[$1];next}FNR>1&&($1 in a){print $1,"in both!"}'

如果可能的话,我想把它作为一个脚本,但如果不是越简单越好。我正在做这个勤勉的检查,但我90%确定我的小清单在大文件中没有匹配的行。但是在检查是这种情况时我需要某种确认。

2 个答案:

答案 0 :(得分:0)

  awk '{if(NR==FNR){a[$0]++} else {if (a[$0])print "in both " $0}}' file1 file2
  1. if(NR==FNR) - 检查是否从第一行读取行,插入要在字典中用作键的值并增加此键的值a[$0]++$0 -key,{ {1}} inc value)
  2. ++ else检查字典是否包含名为if (a[$0])的密钥(检查第一个文件中是否存在行)
  3. 如果行存在$0(打印"在"字符串和两者中找到的值)

答案 1 :(得分:-1)

grep似乎应该可行。好像grep -Fx -f [searchfile] [matchfile](-F表示字符串不是正则表达式匹配,而-x强制整行匹配)应该做你想做的事情吗?

E.g。

$ cat grepsearch.txt
000.000
111.111
222.333

$ cat greptest.txt
1
2
41
5
235
15
15
000.000.00
431
5341
643
16
43
000.000
3251235
431
5431
543
1
543
15341
111.111
435143
54
35
43
11111
1111111
11111
111111
0000000
00000
222.333
432
145
3415
431
543

$ grep -F -f grepsearch.txt greptest.txt
000.000
111.111
222.333

注意没有-F / -x,.被解释为正则表达式:

$ grep -f grepsearch.txt greptest.txt
000.000
111.111
1111111
0000000
222.333
相关问题