我有一个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%确定我的小清单在大文件中没有匹配的行。但是在检查是这种情况时我需要某种确认。
答案 0 :(得分:0)
awk '{if(NR==FNR){a[$0]++} else {if (a[$0])print "in both " $0}}' file1 file2
if(NR==FNR)
- 检查是否从第一行读取行,插入要在字典中用作键的值并增加此键的值a[$0]++
($0
-key,{ {1}} inc value)++
else
检查字典是否包含名为if (a[$0])
的密钥(检查第一个文件中是否存在行)$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