awk 文件健全性检查。 awk 检查 csv 文件中的 null/缺失值

awk 文件健全性检查。 awk 检查 csv 文件中的 null/缺失值

我正在尝试编写一个简单的文件完整性检查脚本。我有一个目录,其中有十几个 CSV 文件,其中包含 id、edname、firstname、lastname、suffix、email。

我喜欢编写一个 awk 脚本来检查第一个字段是否包含数字并且不为空。并且字段号 3,4 和 6 不为空,并且文件包含 6 个字段,不少于 6 个,如果所有这些条件都为真,则不会发生任何事情,但如果其中任何一个条件失败,请将文件重命名为 .bad 。这是我所拥有的,但没有在第 4,6 列中获取缺失值。

for f in *.csv; do 
  awk -F, '!(NF==6 && $1+0==$1 && $3$4$6!=""){f=1; exit} END{exit f}' "$f" || mv "$f" "$f".bad;
done

答案1

正如 Steeldriver 在评论中指出的那样,如果三个字段中的任何一个不为空,则您的第三个测试将为真。我假设你实际上想要这样的东西:

for f in *.csv; do 
  awk -F, '!(NF==6 && $1+0==$1 && $3!="" && $4!="" && $6!=""){f=1; exit} 
            END{exit f}' "$f" || mv "$f" "$f".bad;
done

答案2

如果您只想确保它不为空,则无需进行字符串比较。空字符串是假的,所以:

awk -F, 'BEGIN {flag=0} !(NF==6 && $1+0==$1 && $3 && $4 && $6) {flag=1} END {exit flag}'

相关内容