在 CSV 中搜索非数值的最快方法

  • 本文关键字:方法 CSV 搜索 bash ksh
  • 更新时间 :
  • 英文 :


在Linux/AIX-Unix中使用bash/ksh获取巨大CSV文件的特定列中的非数字值和行号的最快方法是什么?

假设我有以下格式的数据,

1,AAA,486254452,1F
2,BAF,265363,6A
3,AFHGJ, ,3G
...
50000,GAJGFGS,.,5H
...
100000,GHFHFFS,47,6L

考虑到CSV中的行数很容易达到100,000,识别第三列中具有非数字值的行号的最快方法是什么。非数字必须包含 - 空格,'.'。

我尝试了一个 shell 脚本并循环遍历文件的每一行,但这需要很多时间。

line=0
while read lineOfCSV
  3rdCol=`echo $lineOfCSV | cut -d ',' -f3`
  line=`expr $line +1`
  if ! [[ $3rdCol=~ '^[0-9]+$' ]] ; then
    echo "Line = :$line:  NON-NUMERIC VALUE :$3rdCol:"
  fi
done < data.csv

我为一个 80000 行的 CSV 文件运行了上面的代码,处理时间超过 10 分钟。所以我停止了脚本,并在谷歌上搜索了一个更快的解决方案。我找不到任何具体的东西。所以我在这里发布了这个问题。

awk 'BEGIN{FS=","} $3 ~ /[^[:digit:]]/{print NR}' file

应该这样做。

作为旁注,这也将为第三列中的标点符号和空格吠叫。

Perl 对于这种任务通常非常快:

perl -F, -ane '$F[2] =~ /D/ and print "$.n"' file

相关内容

  • 没有找到相关文章

最新更新