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

Man*_*san 1 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
Run Code Online (Sandbox Code Playgroud)

考虑到CSV中的行数可以很容易地为100,000,这是识别第3列中具有非数字值的行号的最快方法.非数字必须包含 - space,'.'.

我尝试了一个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
Run Code Online (Sandbox Code Playgroud)

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

sjs*_*sam 5

awk 'BEGIN{FS=","} $3 ~ /[^[:digit:]]/{print NR}' file
Run Code Online (Sandbox Code Playgroud)

应该这样做.

作为旁注,这将为第三列中的标点和空格树皮.