分隔数据文件中的验证字段计数

时间:2014-12-31 09:25:01

标签: unix awk

我的数据文件如下

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

2 个答案:

答案 0 :(得分:3)

打印每行的字段数:

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个字段。

如果您不想点击12字段,请将测试更改为NF>C

答案 1 :(得分:2)

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)