需要检查 。CSV的一列对另一列.CSV 一列匹配项

  • 本文关键字:一列 CSV python csv awk sed grep
  • 更新时间 :
  • 英文 :


我有一个CSV,是10,000行左右。所有一个字段

.000.000.000
.111.111.111
etc

我需要检查以上的主列表400,000左右的主列表,再次所有一个字段

.0
.1
.3
and up 

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

grep -f [file1][file2]

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

我也尝试了一个尴尬,但这只是我发现的东西,并不真正理解。因此,再次没有得到我想要的结果。

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

如果可能的话,我想将其制作为脚本,但如果不是越简单的话。我确实在做这项检查以进行勤奋,但是我90%肯定我的小列表在大文件中不会匹配。但是在检查情况下,我需要某种确认。

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

grep似乎应该起作用。看起来像 grep -Fx -f [searchfile] [matchfile](-f表示字符串不匹配,-x强迫整个行应匹配(应该做您想要的吗?

,例如

$ 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的注意.的s被解释为正则:

$ grep -f grepsearch.txt greptest.txt
000.000
111.111
1111111
0000000
222.333

最新更新