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