Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash AWK:打印列、列和(&;可能缺少列_Bash_Awk_Printing - Fatal编程技术网

Bash AWK:打印列、列和(&;可能缺少列

Bash AWK:打印列、列和(&;可能缺少列,bash,awk,printing,Bash,Awk,Printing,了解一点背景:我有来自jms ems管理工具的输出,报告到jms队列的连接。我目前筛选出第5、第6和NF-1列(需要第7列,因为第7列并不总是存在),并根据第5列对NF-1列求和,使用以下语句: echo $input|awk '$4 = "+" {print $5, $(NF-1), $6}'|awk '{a[$1]+=$2;b[$1]=$3}END{for (i in a){print " "a[i]"\t",b[i]"\t"i}}' 虽然我相信你知道我在做什么,但我会

了解一点背景:我有来自jms ems管理工具的输出,报告到jms队列的连接。我目前筛选出第5、第6和NF-1列(需要第7列,因为第7列并不总是存在),并根据第5列对NF-1列求和,使用以下语句:

echo $input|awk '$4 = "+" {print $5, $(NF-1), $6}'|awk '{a[$1]+=$2;b[$1]=$3}END{for (i in a){print "           "a[i]"\t",b[i]"\t"i}}'
虽然我相信你知道我在做什么,但我会打破思维过程

  • 从源输入并通过管道输入
  • 检查第4个字段是否为加号,并打印我想要的字段(主要用于分工,我可以在第3步测试输入)
  • 根据第1列(原始第5个字段)对第2列(原始NF-1)求和,并打印剩余部分
  • 输入示例:

    J  553386752 +--Q  +  vm1868            utsl099                                                                                                                                                                                 1   10:39:47
    J  553386804 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:44
    J  553386815 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386851 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386895 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:41
    J  553386931 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386932 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553391311 +--T  -  vm1657            ueai099    cn=ubai090,ou=domain,o=bn,udi=bai-event-mover-3_0-vm165d-prod                                                                                       1   10:39:44
    J  553433995 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433996 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433997 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553435753 +--Q  +  vm1479            ubrm099    some-other-program-name-1_0-prod-vm1454-2014-08-12T15:31:59.541Z.vm1454                                                                             4   10:39:44
    J  553435927 +--T  +  vm1479            ubrm099    ${JMS_CLIENT_ID}.admin.vm1433.2014-08-12T15:32:26.743Z                                                                                                                       1   10:39:50
    
    [sum of NF-1 based upon the uniqueness of $5 AND $7 (if it exists)]   [$6]   [$5]   [$7]
    
    #   user     server  program (clientID)
    25  utsl099  vm1868
    15  usln099  vm1479
    4   ubrm099  vm1479  some-other-program-name-1_0-prod-vm1454
    1   ubrm099  vm1479  ${JMS_CLIENT_ID}.admin.vm1433
    
    我希望输出的内容:

    J  553386752 +--Q  +  vm1868            utsl099                                                                                                                                                                                 1   10:39:47
    J  553386804 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:44
    J  553386815 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386851 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386895 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:41
    J  553386931 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386932 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553391311 +--T  -  vm1657            ueai099    cn=ubai090,ou=domain,o=bn,udi=bai-event-mover-3_0-vm165d-prod                                                                                       1   10:39:44
    J  553433995 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433996 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433997 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553435753 +--Q  +  vm1479            ubrm099    some-other-program-name-1_0-prod-vm1454-2014-08-12T15:31:59.541Z.vm1454                                                                             4   10:39:44
    J  553435927 +--T  +  vm1479            ubrm099    ${JMS_CLIENT_ID}.admin.vm1433.2014-08-12T15:32:26.743Z                                                                                                                       1   10:39:50
    
    [sum of NF-1 based upon the uniqueness of $5 AND $7 (if it exists)]   [$6]   [$5]   [$7]
    
    #   user     server  program (clientID)
    25  utsl099  vm1868
    15  usln099  vm1479
    4   ubrm099  vm1479  some-other-program-name-1_0-prod-vm1454
    1   ubrm099  vm1479  ${JMS_CLIENT_ID}.admin.vm1433
    
    看起来像:

    J  553386752 +--Q  +  vm1868            utsl099                                                                                                                                                                                 1   10:39:47
    J  553386804 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:44
    J  553386815 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386851 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386895 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:41
    J  553386931 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386932 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553391311 +--T  -  vm1657            ueai099    cn=ubai090,ou=domain,o=bn,udi=bai-event-mover-3_0-vm165d-prod                                                                                       1   10:39:44
    J  553433995 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433996 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433997 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553435753 +--Q  +  vm1479            ubrm099    some-other-program-name-1_0-prod-vm1454-2014-08-12T15:31:59.541Z.vm1454                                                                             4   10:39:44
    J  553435927 +--T  +  vm1479            ubrm099    ${JMS_CLIENT_ID}.admin.vm1433.2014-08-12T15:32:26.743Z                                                                                                                       1   10:39:50
    
    [sum of NF-1 based upon the uniqueness of $5 AND $7 (if it exists)]   [$6]   [$5]   [$7]
    
    #   user     server  program (clientID)
    25  utsl099  vm1868
    15  usln099  vm1479
    4   ubrm099  vm1479  some-other-program-name-1_0-prod-vm1454
    1   ubrm099  vm1479  ${JMS_CLIENT_ID}.admin.vm1433
    
    障碍是:

  • 如果$7==$NF-3,则间歇字段确实存在并应打印
  • 基于该字段可能存在的金额和$5

  • 如果有更好的方法,我愿意接受建议。我觉得这是一个挑战,但我认为更多的想法会有所帮助,因为我不是awk专家。提前感谢您。

    您可以将此作为提取字段的起始表单:

    awk -v FIELDWIDTHS='3 10 6 3 18 11 148 4 8' -v OFS='|' \
            '{ for (i = 1; i <= NF; ++i) sub(/[ \t]*$/, "", $i) } 1' file
    
    更新 在具有对齐列的输入上:

    J  553386752 +--Q  +  vm1868            utsl099                                                                                                                                                                                 1   10:39:47
    J  553386804 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:44
    J  553386815 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386851 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386895 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:41
    J  553386931 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553386932 +--Q  +  vm1868            utsl099                                                                                                                                                                                 4   10:39:47
    J  553391311 +--T  -  vm1657            ueai099    cn=ubai090,ou=domain,o=bn,udi=bai-event-mover-3_0-vm165d-prod                                                                                                                1   10:39:44
    J  553433995 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433996 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553433997 +--Q  +  vm1479            usln099                                                                                                                                                                                 5   10:39:50
    J  553435753 +--Q  +  vm1479            ubrm099    some-other-program-name-1_0-prod-vm1454-2014-08-12T15:31:59.541Z.vm1454                                                                                                      4   10:39:44
    J  553435927 +--T  +  vm1479            ubrm099    ${JMS_CLIENT_ID}.admin.vm1433.2014-08-12T15:32:26.743Z                                                                                                                       1   10:39:50
    
    此代码:

    awk -v FIELDWIDTHS='3 10 6 3 18 11 173 4 8' -v OFS='\t' \
           '{ for (i = 1; i <= NF; ++i) sub(/[ \t]*$/, "", $i) }
            $4 == "+" { a[$5] += $8; b[$5] = $6; c[$5] = $7 }
            END { for (i in a) { print " " a[i], b[i], i, c[i]} }' file
    

    让我试着使用固定宽度,看看效果如何。谢谢你的想法!使用:
    |awk-v FIELDWIDTHS='3 10 6 3 18 11 173 4 8'-v OFS='|'{for(i=1;i@krmarshall87我注意到第8行和第12行中的最后两列与其他行中的最后两列不对齐。即使在原始文件中也是这样吗?
    $4=“+”
    可能应该是
    $4==“+”
    。请检查简化的代码。当我开始根据队列名称将其应用于数千行时,发现列的宽度是动态的,基于提供的最宽值,因此非常可变。是否还有类似$7==$NF-3、打印$7这样的情况?