zoukankan      html  css  js  c++  java
  • shell脚本,awk合并一列的问题。

    文件 file2内容如下:
    0 qwert
    1 asdfghjk
    2 asdjkl
    2 zxcvbn
    3 dfghjkll
    4 22222
    4 tyuiop
    4 bnm

    让第一列相等的合并成一行,不要第一列,也就是变为如下格式:
    22222;tyuiop;bnm
    qwert
    asdfghjk
    asdjkl;zxcvbn
    dfghjkll

    第一种解法

    解题思路:

    awk '{if(a[$1]){a[$1]=a[$1]";"$2}else{a[$1]=$2}}END{for(i in a)print a[i]}' file2

    file2

    0 qwert
    1 asdfghjk
    2 asdjkl
    2 zxcvbn
    3 dfghjkll
    4 22222
    4 tyuiop
    4 bnm

     第一行  if(a[0]) 因为a[0]没有任何值,因此直接进行输出else a[0]= qwert

     第二行  if(a[1]) 因为a[1]没有任何值,因此直接进行输出else a[1]= asdfghjk

     第三行  if(a[2]) 因为a[2]没有任何值,因此直接进行输出else a[2]= asdjkl

     第四行  if(a[2]) 因为a[2]= asdjkl,符合条件,执行a[$1]=a[$1]";"$2----> a[2]=a[2]";"$2--->a[2]=asdjkl;zxcvbn

     第五行 if(a[3]) 因为a[3]没有任何值,因此直接进行输出else a[3]= dfghjkll

     第六行 if(a[4]) 因为a[4]没有任何值,因此直接进行输出else a[4]=  22222

     第七行  if(a[4]) 因为a[4]= 22222,符合条件,执行a[$1]=a[$1]";"$2----> a[4]=a[4]";"$2--->a[4]=22222;tyuiop

     第八行  if(a[4]) 因为a[4]= 22222;tyuiop,符合条件,执行a[$1]=a[$1]";"$2----> a[4]=a[4]";"$2--->a[4]=22222;tyuiop;bnm

    整个文件循环完毕后最后的结果是:

     a[0]= qwert

     a[1]= asdfghjk

     a[2]=asdjkl;zxcvbn

     a[3]= dfghjkll

     a[4]=22222;tyuiop;bnm

    END{for(i in a)print a[i]}

    使用for去数组a的下标 0 1 2 3 4

    然后分别打印 a[0] a[1] a[2] a[3] a[4] 

    (因为提取数组下标是一个不规则的输出,因此这个结果可能是随机排序)

    第二种解法

  • 相关阅读:
    spring + spring mvc + mybatis + react + reflux + webpack Web
    陈忠实和路遥:日他妈的文学和你懂个锤子
    Spring+SpringMVC+MyBatis+easyUI整合基础篇
    JAVA方法中的参数用final来修饰的效果
    全球晶圆代工厂哪家强?2016年Top30名单
    EXT combobox 二级连动 清空store缓存数据
    潘通
    MySQL性能优化
    启用了不安全的HTTP方法
    Hibernate一级缓存(基于查询分析)
  • 原文地址:https://www.cnblogs.com/wangyuebo/p/5911251.html
Copyright © 2011-2022 走看看