我的目标是检查文本文件每行第三个字段的长度。第三个字段必须是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 }'
感谢所有人帮助我。到目前为止仍然是更好的社区
答案 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