2015-11-05 63 views
1

我有7列的文件与插入符号(^)分离器 例如AWK脚本多字段验证

ABCD123456^12345678^192.654^02Aug15^12:10:36 

我写一个awk命令,它会检查重复

awk '!seen[$0]++' filename 

长度结合第一场应该是10 &秒应该是8

awk -f '^' '{ if ((length($1) == 10) && (length($1) == 10)) print }' 

问题是

  1. 我该如何做时间验证([0-9]:[0-9]:[0-9])?什么AWK查询

    的awk -F '^' '$ 5〜[0-9]:[0-9]:[0-9]' 打印

    但是,这是行不通的

  2. 日期验证。我如何可以验证两位数天,3字符月& 2位数的年份

  3. 在第三场十进制数验证

  4. 我如何可以结合这一切在单一awk脚本

回答

2

你可以它们组合成一个awk命令是这样的:

awk -F '^' 'length($1) == 10 && length($2) == 8 && 
    $3 ~ /^[0-9]+\.[0-9]+$/ && $5 ~ /^[0-9]{2}:[0-9]{2}:[0-9]{2}$/ && !seen[$0]++' file 
+1

完美!!,如何可以验证02Aug15,任何或只是'/^[0-9] {2} [AS] [AZ] {2} [0 -9] {2} $ /' – Ashish

+0

是'/^[0-9] {2} [A-S] [a-z] {2} [0-9] {2} $ /'应该可以正常工作。 – anubhava

+0

作为一种魅力,+1的高效方式来做到这一点 – Ashish