首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >和awk substr函数- Linux命令

和awk substr函数- Linux命令
EN

Stack Overflow用户
提问于 2022-02-23 15:38:04
回答 1查看 70关注 0票数 0

是否有一种方法可以编写命令来执行以下逻辑以获得以下计数:

B根据subStr值计算的记录和T记录之和($0,2,10)

注: subStr($0,1,1)定义了记录类型A、B或T。

下面是一个示例文本文件。

代码语言:javascript
复制
A 000000001 201903 ABC    
B201901JOHN 000000006    
B201901KUHN 000000007    
T00000002B00000000I    
A 000000002 201903 CBA    
B201901BONN 000000008    
B201901BERN 000000009    
B201901HULA 000000009    
T00000003{00000000I

预期产出:

1

一直执行到文件结束:

代码语言:javascript
复制
If substr($0,1,1) = "B" Then 
    bCount=bCount+1

Else If left($0,1,1) = "T" Then 

    tCount=substr($0,2,9)*10 

    Select Case substr($0,10,1) 

        Case "{" tCount=tCount+0 

        Case "A" tCount=tCount+0 

        Case "B" tCount=tCount+0 

        Case "C" tCount=tCount+0 

        Case "D" tCount=tCount+0 

        Case "K" tCount=(tCount+1) * -1

        Case "L" tCount=(tCount+2) * -1 

        Case "}" tCount=(tCount+0) * -1 

        End Select

End If 

到目前为止,我的命令是计算以"B“开头的记录数量。

代码语言:javascript
复制
egrep -o file1.txt | wc -l > BRecCount.txt

我不知道如何根据每个T记录的位置2到10的值来得到T记录的和。

然后组合这些命令,查看B记录计数和T记录总数是否相等,然后返回0,否则返回1。

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 17:28:59

这是如此直截了当(我们会看到,IMHO),以至于我无法抗拒自己:

代码语言:javascript
复制
$ awk '{
    if(substr($0,1,1) == "B")
        bCount=bCount+1
    else if(substr($0,1,1) == "T") {
        tCount=substr($0,2,9)*10
        switch(substr($0,10,1)) {
            case "{":
                tCount=tCount+0;
                break
            case "A":
                tCount=tCount+0
                break
            case "B":
                tCount=tCount+0
                break
            case "C":
                tCount=tCount+0
                break
            case "D":
                tCount=tCount+0
                break
            case "K":
                tCount=(tCount+1) * -1
                break
            case "L":
                tCount=(tCount+2) * -1
                break
            case "}":
                tCount=(tCount+0) * -1
                break
        }
    }
}
END {
    exit bCount!=tCount
}' file; echo $?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71239917

复制
相关文章

相似问题

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