繁体   English   中英

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

[英]Need to check .CSV's one column against another .CSV one column for matches

我有一个大约 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% 的把握我的小列表在大文件中没有匹配的行。 但是在检查情况是否如此时,我需要某种确认。

  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 value)
  2. else if (a[$0])检查字典是否包含名为$0的键(检查第一个文件中是否存在行)
  3. 如果行存在print "in both " $0 (打印 "in both" 字符串和在两者中找到的值)

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 的. 被解释为正则表达式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM