如何验证每一行中的所有单词/字符串都具有相同的计数
如果每一行中的所有单词都具有相同的计数,那么语法将返回true和计数单词的数量。
如果行数不相同,语法将返回false和count=NA
例如,对于下面的示例,我们将得到true和count=5
sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf sdd
sde sdb sdd sdc sdf
sdc sde sdd sdb sdf关于下面的示例,我们将得到false和count=NA
sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf
sde sdb sdd sdc sdf
sde sdd sdb sdf关于以下示例的另一个示例,我们将得到false和count=NA
sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf
sde sdb sdd sdc sdf
sde sdd sdb sdf sde 发布于 2018-01-16 10:42:48
使用awk:
awk 'BEGIN { r = "true" } NR == 1 { n = NF; next } NF != n { r = "false"; n = "N/A"; exit } END { printf("status=%s count=%s\n", r, n) }' somefilename或者作为一个awk脚本:
#!/usr/bin/awk -f
BEGIN { r = "true" }
NR == 1 { n = NF; next }
NF != n { r = "false"; n = "N/A"; exit }
END { printf("status=%s count=%s\n", r, n) }脚本首先将r (如“结果”中的内容)设置为true (我们假设它为true而不是false)。然后将n (如“number”中的)初始化为第一行的字段数。
如果输入数据中的任何其他行有不同数量的字段,则r设置为false,n设置为N/A,脚本退出(通过END块)。
最后,打印了r和n的当前值。
此脚本的输出将类似于
status=true count=5或
status=false count=N/A这可以与export或bash's declare,或eval:
declare $( awk '...' somefilename )这将创建shell变量count和status,这些变量将在调用的shell中可用。
发布于 2018-01-16 10:44:11
Awk解决方案:
awk 'NR==1{ c=NF; st="true" }
NR>1 && !(NF in a){ c="NA"; st="false"; exit }{ a[NF] }
END{ printf "count=%s status=%s\n", c, st }' filehttps://unix.stackexchange.com/questions/417470
复制相似问题