结果为 124:
awk 'BEGIN {FS = ","; count = 0}; { if ($7 ~ /Nature Life/) { count++ }} END {print count}' file.csv
结果为 123:
grep -cE '^([^,]*,){6}[^,]*Nature Life' file.csv
文件太大,无法读取。
有什么建议吗?
答案1
如果您想发现不一致之处,下面应该显示 awk 捕获而 grep 未捕获的一行:
awk 'BEGIN{FS=","}$7~/Nature Life/' file.csv | grep -vE '^([^,]*,){6}[^,]*Nature Life'
这里的目标是打印 awk 看到的所有内容,然后过滤掉 grep 看到的所有内容 (grep -v)。您的 grep 正则表达式很可能不是 100% 您正在寻找的内容。
答案2
grep
至少对于 GNU 来说,在 UTF-8 语言环境中,如果包含不形成的字节序列,,[^,]*,
则不会匹配,something,
something
有效字符。
例如:
$ printf '1,\200,3,4,5,6,Nature Life,8\n' |
grep -cE '^([^,]*,){6}[^,]*Nature Life'
0
然而,对于 awk 字段分割来说,这并不重要:
$ printf '1,\200,3,4,5,6,Nature Life,8\n' | awk -F, '$7 ~ /Nature Life/'
1,�,3,4,5,6,Nature Life,8
运行grep
underLC_ALL=C
以避免出现编码错误的文本问题(只要要搜索的字符串和分隔符 ( ,
) 均为 ASCII 格式)。
$ printf '1,\200,3,4,5,6,Nature Life,8\n' |
LC_ALL=C grep -cE '^([^,]*,){6}[^,]*Nature Life'
1