我需要检查文本文件中的两件事:
- 如果是制表符分隔
- 如果它正好有 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