我有数据文件,如下验证字段数
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