如何检查文件是否以制表符分隔且有 8 列?

如何检查文件是否以制表符分隔且有 8 列?

我需要检查文本文件中的两件事:

  1. 如果是制表符分隔
  2. 如果它正好有 8 列

我如何检查这些内容并在其中一个为假时显示错误消息?

答案1

一种解决方案是使用 awk:

awk -F "\t" 'NF != 8' data.txt

此命令将打印出文件 data.txt 中不包含 8 个字段的那些行。

答案2

您可以使用 perl oneliner,如下所示:

perl -ne '(s/\t//go)==7 or die "Not tabdelimitedand 8-columned"' t.txt

如果文件不符合,它将退出并显示错误消息。允许进一步的(bash)脚本编写:

if perl -ne '(s/\t//go)==7 or exit -1' t.txt
then
    echo correct format
else
    echo unexpected format
fi

答案3

ct=($(sed -re 's/[^\t]//g' "$file" | expand -t1 | wc -l -c -L))

if (( ((ct[0] * 8) == ct[1]) && (ct[2] == 7) )) ;then
    echo "file contains 8 tab-delimited fields on every line"
else 
    if (( ct[1] == ct[0] )) ;then
        echo "file does not contain any tab-delimiters"
    else
        echo "file contains tabs, but does not have 8 fields on every line"
    fi
fi

相关内容