使用分隔符检查文本文件中的字段长度

时间:2015-05-05 21:25:48

标签: bash

我的目标是检查文本文件每行第三个字段的长度。第三个字段必须是8个字符的数字字符串,并且在输出中我想拥有第三个字段长度与8不同且不是数字的所有行

示例:

Terry;18;44123456;yes
Mark;19;44098711;no
Sandy;19;4411897090;no
Tom;17;4413;no

输出:

Sandy;19;4411897090;no
Tom;17;4412;no

我试过了:

awk -F, '{if(length($3) == 8 ) print }' 

但我无法达到目标。我该怎么办?

解决方案:

awk -F, '{if(length($3) != 8 ) print }'

感谢所有人帮助我。到目前为止仍然是更好的社区

6 个答案:

答案 0 :(得分:3)

您的命令使用逗号作为FS -F,,您的示例使用分号作为分隔符。

第三个字段为八个字符的行。

awk -F\; 'length($3) == 8'

第三个字段的行不是八个字符。

awk -F\; 'length($3) != 8'

第三个字段的行不是八个字符或第三个字段不是整数。

awk -F\; 'length($3) != 8 || $3 + 0 != $3'

答案 1 :(得分:1)

它不会工作,你必须逃避&#39 ;;'

awk -F\; '{if(length($3) == 8 ) print }'

答案 2 :(得分:1)

-F的字段分隔符(awk)应为;而不是,

答案 3 :(得分:1)

你可以使用好的grep,因为它适用于这种工作:

grep '[^;]\+;[^;]\+;[[:digit:]]\{8\}' file

......甚至更简单:

egrep '[^;]+;[^;]+;[[:digit:]]{8}' file

或:

egrep '([^;]+;){2}[[:digit:]]{8}' file

答案 4 :(得分:1)

只需:

div:after {
    content: "";
    background-color: #fff;
    opacity:0.5;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    position: absolute;

}

awk -F\; 'length($3)!=8' file print语句可以省略。

答案 5 :(得分:1)

使用grep

grep "^[^;]*;[^;]*;[0-9]\{8\};[^;]*$" file.txt