2012-03-17 91 views
0

我需要檢查以下數據並報告與給定條件不匹配的行數。檢查並返回無效數據

set 582:1960:4c31ed7dea 2012-03-10~23:55:00\r\n 
set 565:388:13c10fd316 2012-03-10~23:55:00\r\n 
set 519:348:361189d4b9 extra_text 2012-03-10~23:55:00\r\n 
set 498:5634:6047172ecc 2012-03-10~23:55:00\r\n 
set 565:0:bf7a80ee4f 2012-03-10~23:55:00 

1)所有行應該開始以詞「設置」和結束「\ r \ n」個

2)所有的線應具有確切3號由空格分隔字段。

在示例數據中,它應該返回無效行數:2,最好是整行。 第三行有一個額外的單詞,第五行不能正確結束。

回答

1

awk好這一點。一個相當全功能的腳本:

#!/usr/bin/awk -f 

BEGIN {ends = fields = total = 0 } 

NF != 3 || !/\r$/ { 
    total++ 
    if(NF != 3) fields++ 
    if(!/\r$/) ends++ 
    print 
} 

END { 
    printf "Wrong number of fields: " fields 
    printf "Did not end in a CR: " ends 
    printf "Total: " total 
} 

短的一行,只打印得罪線:

awk 'NF != 3 || !/\r$/' file 

打印和統計總數:

awk 'NF!=3||!/\r$/{total++} END{print "Total: " total} 
1

要打印的無效行:

grep -v '^set [^ ][^ ]* [^ ][^ ]*\\r\\n$' FILENAME 

要打印無效的行數:

grep -cv '^set [^ ][^ ]* [^ ][^ ]*\\r\\n$' FILENAME