检查文件是否每行有3个单词unix

时间:2013-10-01 14:12:38

标签: bash file unix format output

嘿伙计,所以我试图检查一个文件是否每行包含3个单词,每个单词之间只有一个空格。每行之前或之后不能有任何空格。此外,txt文件有多少行并不重要。然后,如果文件格式错误,则输出“格式不正确的行后文件格式错误”,并输出坏行。

提前致谢。

4 个答案:

答案 0 :(得分:2)

你可以说:

diff inputfile <(awk 'NF==3' inputfile) || echo "Bad format"

答案 1 :(得分:1)

您可以这样使用:

if [ $(sed '/^[ ]\?\(\([a-zA-Z_]\+ \)\{2\}[a-zA-Z_]\+\)/d' a.txt | wc -l) != 0 ] ; then
    echo "error in file"
    exit 1
fi

它利用sed删除所有可以使用的行。如果之后文件大小不是0,则文件中必定存在错误。

答案 2 :(得分:0)

您可以遍历文件中的行,并使用正则表达式检查每行是否符合您的要求。

#!/bin/bash
while IFS= read -r line
do
   if [[ ! $line =~ ^[^[:space:]]+\ [^[:space:]]+\ [^[:space:]]+$ ]]
   then
       echo "invalid line: $line"
   fi
done < file

打印出无效的每一行。

^[^[:space:]]+\ [^[:space:]]+\ [^[:space:]]+$是一个正则表达式,它匹配三个单词,每个单词之间只有一个空格,并且在行的开头或结尾没有空格。

答案 3 :(得分:0)

试试这个

awk 'NF!=3{bad[k++]=$0} 
     END{print "Bad file format following lines were formatted incorrectly:";
         for (i in bad){print i}}' file