我正在尝试编写一个简单的文件完整性检查脚本。我有一个目录,其中有十几个 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}'