我有一个csv文件,我想要计算没有NF(没有字段)等于某个数字的记录,
我试过了
nawk '{print NF}' FS='|' "$CSVFILE" | grep "$Variable" | nawk '{print $1}' | sort | uniq -c
此处CSVFILE是任何CSV文件 和变量是用户除了查找文件是否包含没有字段的任何随机数
有什么方法我只能通过awk
来使用它示例输入文件
dsdgh||@jhsjdh||jdhjdhfu|123|
#45ghf|123|laiej||||
|hyrhyf|||fhyr|@#$%|
假设我想检查有多少记录没有不等于5的字段
所以预期输出应为3,因为所有3个记录的NF都小于或大于5
答案 0 :(得分:2)
NF
不等于n
时增加点数并在结尾打印计数:
awk -F"|" -v n=5 'NF!=n{COUNT++} END{print COUNT}' Input_file
答案 1 :(得分:1)
特定于您的文件
假设
VarNumber
是一个有效的整数(不是保护此请求的一部分)评论代码
awk -F '[|]' -v NotEqualTo="${VarNumber}" '
# if record have number of field NOT equal to given number
NF != NotEqualTo {
# Count the line
c++
}
# at end of file
END {
# print the count (only)
print c
}
' YourFile
注意:
-F '[|]'
来避免使用RegEx或依赖选项/配置的任何误解VarNumber
是批量变量,其中包含您要排除的字段数许多文件的通用
awk -F '[|]' -v NotEqualTo="${VarNumber}" '
# Count if NF is NOT the number given and put info in array
# 1 entry by file name
NF != NotEqualTo {c[FILENAME]++}
# at end of file, print the count (only) for each file (eement of array)
END { for( f in c) print f " : " c[f] }
' YourFiles*
答案 2 :(得分:1)
这将为您提供完整的字段数分布
$ awk -F\| '{c[NF]++} END{for(i in c) print i ":", c[i]}' file | sort
恢复所有但是等于5,管道到另一个awk
$ ... | awk '!/^5:/{sum+=$2} END{print sum}'