0

嘿伙计们,所以我正在尝试检查文件是否每行包含 3 个单词,每个单词之间只有一个空格。每行之前或之后不能有任何空格。同样,txt文件有多少行也没关系。然后,如果文件的格式错误,它会输出“错误的文件格式后面的行格式不正确”并输出错误的行。

提前致谢。

4

4 回答 4

2

你可以说:

diff inputfile <(awk 'NF==3' inputfile) || echo "Bad format"
于 2013-10-01T14:19:45.223 回答
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中必须有错误。

于 2013-10-01T14:17:07.830 回答
0

尝试这个

awk 'NF!=3{bad[k++]=$0} 
     END{print "Bad file format following lines were formatted incorrectly:";
         for (i in bad){print i}}' file
于 2013-10-01T14:43:58.933 回答
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:]]+$是一个正则表达式,它匹配三个单词,每个单词之间只有一个空格,并且在行的开头或结尾没有空格。

于 2013-10-01T14:41:06.723 回答