微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shell脚本中的group_by和group_concat

如何解决Shell脚本中的group_by和group_concat

我的目的是在类路径中标识重复的jar。因此,我已使用以下命令进行一些预处理。

mvn -o dependency:list | grep ":.*:.*:.*" | cut -d] -f2- | sed 's/:[a-z]*$//g' | sort -u -t: -k2

产生的文件格式为

group_id:artifact_id:type:version

所以,现在举个例子,我在文件中有以下两行

com.sun.jersey:jersey-client:jar:1.19.1
org.glassfish.jersey.core:jersey-client:jar:2.26

我要生成一个具有以下内容文件

jersey-client | com.sun.jersey:1.19.1,org.glassfish.jersey.core:2.26

文件内容有所不同。 diff版本可以有多个库。 知道如何使用shell脚本吗?我想避免数据库查询

在此处添加示例文件的快照...

org.glassfish.jaxb:jaxb-runtime:jar:2.4.0-b180725.0644
    org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.2.Final
    org.jboss.logging:jboss-logging:jar:3.3.2.Final
    org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.1.Final
    org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:jar:1.1.3.Final
    com.github.stephenc.jcip:jcip-annotations:jar:1.0-1
    com.beust:jcommander:jar:1.72
    com.sun.jersey.contribs:jersey-apache-client4:jar:1.19.1
    org.glassfish.jersey.ext:jersey-bean-validation:jar:2.26
    com.sun.jersey:jersey-client:jar:1.19.1
    org.glassfish.jersey.core:jersey-client:jar:2.26
    org.glassfish.jersey.core:jersey-common:jar:2.26
    org.glassfish.jersey.containers:jersey-container-servlet:jar:2.26
    org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.26
    com.sun.jersey:jersey-core:jar:1.19.1
    org.glassfish.jersey.ext:jersey-entity-filtering:jar:2.26
    org.glassfish.jersey.inject:jersey-hk2:jar:2.31
    org.glassfish.jersey.media:jersey-media-jaxb:jar:2.26
    org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.26
    org.glassfish.jersey.media:jersey-media-multipart:jar:2.26
    org.glassfish.jersey.core:jersey-server:jar:2.26
    org.glassfish.jersey.ext:jersey-spring4:jar:2.26
    net.minidev:json-smart:jar:2.3
    com.google.code.findbugs:jsr305:jar:3.0.1
    javax.ws.rs:jsr311-api:jar:1.1.1
    org.slf4j:jul-to-slf4j:jar:1.7.25
    junit:junit:jar:4.12
    org.latencyutils:LatencyUtils:jar:2.0.3
    org.liquibase:liquibase-core:jar:3.5.5
    log4j:log4j:jar:1.2.16
    org.apache.logging.log4j:log4j-api:jar:2.10.0
    com.googlecode.log4jdbc:log4jdbc:jar:1.2
    org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0
    ch.qos.logback:logback-classic:jar:1.2.3
    ch.qos.logback:logback-core:jar:1.2.3
    io.dropwizard.metrics:metrics-core:jar:4.1.6
    io.dropwizard.metrics:metrics-healthchecks:jar:4.1.6
    io.dropwizard.metrics:metrics-jmx:jar:4.1.6
    io.micrometer:micrometer-core:jar:1.0.6
    org.jvnet.mimepull:mimepull:jar:1.9.6
    com.microsoft.sqlserver:mssql-jdbc:jar:6.2.2.jre8
    com.netflix.netflix-commons:netflix-commons-util:jar:0.3.0
    com.netflix.netflix-commons:netflix-statistics:jar:0.1.1
    io.netty:netty-buffer:jar:4.1.27.Final
    io.netty:netty-codec:jar:4.1.27.Final
    io.netty:netty-codec-http:jar:4.1.27.Final
    io.netty:netty-common:jar:4.1.27.Final
    io.netty:netty-resolver:jar:4.1.27.Final
    io.netty:netty-transport:jar:4.1.27.Final
    io.netty:netty-transport-native-epoll:jar:4.1.27.Final
    io.netty:netty-transport-native-unix-common:jar:4.1.27.Final
    com.nimbusds:nimbus-jose-jwt:jar:8.3

解决方法

可能有更简单的方法,但这是我现在可以做的...可以通过一些调整将其缩小为一行

[07:38 am alex ~]$ date; cat a
Wed  4 Nov 07:38:21 GMT 2020
com.sun.jersey:jersey-client:jar:1.19.1
org.glassfish.jersey.core:jersey-client:jar:2.26

[07:38 am alex ~]$ FIRST=`cat a | awk -F'[:]' '{print $2}' | uniq`
[07:38 am alex ~]$ SECOND=`cat a | awk -F'[:]' '{print $1":"$4}' | xargs | sed 's/ /,/g'`
[07:38 am alex ~]$ echo "$FIRST | $SECOND"
jersey-client | com.sun.jersey:1.19.1,org.glassfish.jersey.core:2.26
,

请尝试以下操作,这可以在一个<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <SELECT name="obj_1" size="1" class="archive-select"> <OPTION selected disabled>from</OPTION> <OPTION value="1">Less than 200</OPTION> <OPTION value="200">200</OPTION> <OPTION value="400">400</OPTION> <OPTION value="600">600</OPTION> <OPTION value="800">800</OPTION> <OPTION value="1000">1'000</OPTION> <OPTION value="1200">1'200</OPTION> <OPTION value="1400">1'400</OPTION> <OPTION value="1600">1'600</OPTION> <OPTION value="1800">1'800</OPTION> <OPTION value="2000">2'000</OPTION> <OPTION value="2200">2'200</OPTION> <OPTION value="2400">2'400</OPTION> <OPTION value="2600">2'600</OPTION> <OPTION value="2800">2'800</OPTION> <OPTION value="3000">3'000</OPTION> </SELECT><br> <SELECT name="obj_2" size="1" style="margin-bottom:15px;" class="archive-select"> <OPTION selected disabled>to</OPTION> <OPTION value="200">200</OPTION> <OPTION value="400">400</OPTION> <OPTION value="600">600</OPTION> <OPTION value="800">800</OPTION> <OPTION value="1000">1'000</OPTION> <OPTION value="1200">1'200</OPTION> <OPTION value="1400">1'400</OPTION> <OPTION value="1600">1'600</OPTION> <OPTION value="1800">1'800</OPTION> <OPTION value="2000">2'000</OPTION> <OPTION value="2200">2'200</OPTION> <OPTION value="2400">2'400</OPTION> <OPTION value="2600">2'600</OPTION> <OPTION value="2800">2'800</OPTION> <OPTION value="3000">3'000</OPTION> <OPTION value="300000">More than 3'000</OPTION> </SELECT>本身中完成。完全基于您显示的样本。

awk

说明: 添加以上详细说明。

awk '
BEGIN{
  FS=":"
  OFS=" | "
}
FNR==1{
  first=$1
  third=$3
  second=$2
  next
}
FNR==2{
  print second,first","$1":"$NF
}
' Input_file

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。