是否有一种方法可以编写命令来执行以下逻辑以获得以下计数:
B根据subStr值计算的记录和T记录之和($0,2,10)
注: subStr($0,1,1)定义了记录类型A、B或T。
下面是一个示例文本文件。
A 000000001 201903 ABC
B201901JOHN 000000006
B201901KUHN 000000007
T00000002B00000000I
A 000000002 201903 CBA
B201901BONN 000000008
B201901BERN 000000009
B201901HULA 000000009
T00000003{00000000I预期产出:
1
一直执行到文件结束:
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“开头的记录数量。
egrep -o file1.txt | wc -l > BRecCount.txt我不知道如何根据每个T记录的位置2到10的值来得到T记录的和。
然后组合这些命令,查看B记录计数和T记录总数是否相等,然后返回0,否则返回1。
发布于 2022-02-23 17:28:59
这是如此直截了当(我们会看到,IMHO),以至于我无法抗拒自己:
$ 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 $?https://stackoverflow.com/questions/71239917
复制相似问题