我不太了解awk
来完成我想在这里完成的任务。也许应该使用别的东西?我有两个csv文件。一个非常大,有近500,000行,另一个可能有1,000到30,000行。
文件1包含第3栏中的句子列表。
文件2包含第1列中常用单词的列表。
如何仅打印文件1中仅包含文件2列表中的完整单词的行?这可能是非常基本的。如果之前有人问过我很抱歉,但我找不到答案。
文件1:
239493 eng Ice is cold.
393939 eng Freshwater turns to ice when the temperature drops below zero degrees centigrade.
383822 eng Lava is hot.
330209 eng Lava is very hot.
330207 eng Bacon is tasty.
文件2:
ice
lava
cold
is
hot
bacon
narwhale
midnight
输出:
239493 eng Ice is cold.
383822 eng Lava is hot.
答案 0 :(得分:3)
您可以尝试此awk
,
awk 'NR==FNR{a[toupper($1)]++;next} {f=3; for(i=3;i<=NF;i++){ if(toupper($i) in a){f++} } if(f==NF){print $0}}' file2 file1
答案 1 :(得分:0)
使用Perl:
perl -lane '
BEGIN { $x = pop; %h = map { chomp; lc $_ => 1 } <>; @ARGV = $x }
print if scalar @F - 2 == scalar grep { $_ } map { s/\W//g; $h{lc $_} } @F[2..$#F]
' file2 file1
结果:
239493 eng Ice is cold.
383822 eng Lava is hot.
使用AWK:
awk '
FNR==NR { a[tolower($1)]++; next }
{ r = $0; for (i=3;i<=NF;i++) { gsub(/\W/,"",$i); if (tolower($i) in a) c++ } }
c + 2 == NF { print r }
c = 0
' file2 file1
结果:
239493 eng Ice is cold.
383822 eng Lava is hot.