首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash +如何用相同的计数验证每行中的所有单词

bash +如何用相同的计数验证每行中的所有单词
EN

Unix & Linux用户
提问于 2018-01-16 10:27:28
回答 2查看 447关注 0票数 1

如何验证每一行中的所有单词/字符串都具有相同的计数

如果每一行中的所有单词都具有相同的计数,那么语法将返回true和计数单词的数量。

如果行数不相同,语法将返回false和count=NA

例如,对于下面的示例,我们将得到true和count=5

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf 
sde sdb sdd sdc sdf
sde sdd sdb sdf sde 
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-01-16 10:42:48

使用awk

代码语言:javascript
复制
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脚本:

代码语言:javascript
复制
#!/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设置为falsen设置为N/A,脚本退出(通过END块)。

最后,打印了rn的当前值。

此脚本的输出将类似于

代码语言:javascript
复制
status=true count=5

代码语言:javascript
复制
status=false count=N/A

这可以与exportbash's declare,或eval

代码语言:javascript
复制
declare $( awk '...' somefilename )

这将创建shell变量countstatus,这些变量将在调用的shell中可用。

票数 2
EN

Unix & Linux用户

发布于 2018-01-16 10:44:11

Awk解决方案:

代码语言:javascript
复制
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 }' file
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/417470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档