我有數據文件,如下驗證字段數
123|123|123#456|456|456|456#789|789|789
這裏行DELIM是#
和col DELIM是|
我要放兩個驗證,即計算行-vRS="#" 'END{print NR}'
數
現在進行第二次驗證,其中我需要計算每行的字段數並與某個常數值進行比較-F"|" '{print NF}'
我需要幫助把這個邏輯編碼構造awk
。
預期輸出:具有多於3個字段的行應該打印行號。
2 : 456|456|456|456
我有數據文件,如下驗證字段數
123|123|123#456|456|456|456#789|789|789
這裏行DELIM是#
和col DELIM是|
我要放兩個驗證,即計算行-vRS="#" 'END{print NR}'
數
現在進行第二次驗證,其中我需要計算每行的字段數並與某個常數值進行比較-F"|" '{print NF}'
我需要幫助把這個邏輯編碼構造awk
。
預期輸出:具有多於3個字段的行應該打印行號。
2 : 456|456|456|456
要打印領域的數量每行:
awk -vRS=# -F\| '{print NF}' file
3
3
3
爲了測試每行有3個字段:
awk -vRS=# -F\| -vC=3 '{print (NF==C?"yes":"no")}' file
yes
yes
yes
一些更多的測試:
awk -vRS=# -F\| -vC=3 'NF!=C {print "NR="NR,$0;f=1} END {print "Number of rows =",NR;print (!f?"All rows has "C" fields":"Some rows does not have "C" fields")}' t
NR=2 456|777|765|452
Number of rows = 3
Some rows does not have 3 fields
這將打印行數,並判斷是否所有行都有3個字段。
如果你不喜歡被擊中的1
和2
領域,改變測試NF>C
awk -vRS=# -F\| 'NF>3{print NR, ":", $0}' File
集RS(record seperator to #)
,並且Field seperator to |
首先。
在awk腳本中,檢查NF(number of fields) > 3
。如果是,然後打印NR(row number)
,:
和the row itself($0)
@fedorqui它確實有一個缺陷,修復它:) – Jotne