文件 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]

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

第二种解法

shell脚本,awk合并一列的问题。的更多相关文章

  1. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. shell脚本 awk工具

    awk工具概述awk编程语言/数据处理引擎基于模式匹配检查输入文本,逐行处理并输出通常在shell脚本中,或取指定的数据单独用时,可对文本数据做统计 命令格式格式一:awk [选项] '[条件]{编辑 ...

  3. shell脚本 awk实现实时监控网卡流量

    一.简介 通过第3方工具获得网卡流量,这个大家一定很清楚.其实通过脚本一样可以实现效果.下面是我个人工作中整理的数据.以下是shell脚本统计网卡流量. 现原理: cat /proc/net/dev ...

  4. shell脚本——awk

    目录 一.awk 1.1.awk简介 1.2.基本格式 1.3.工作原理 1.4.常见的内建变量(可直接用) 按字段输出文本 1.5.awk和getline 有重定向符 无重定向符 1.6.指定分隔符 ...

  5. shell脚本awk的基本用法

    AWK 1 AWK 2 3 linux取IP地址 4 5 ifconfig | grep -w inet | sed -n '1p' | awk '{print $2}' 6 7 eg: 8 9 aw ...

  6. shell脚本 awk实现查看ip连接数

    一.简介 处理文本,是awk的强项了. 无论性能已经速度都是让人惊叹! 二.使用 适用:centos6+ 语言:英文 注意:无 awk 'BEGIN{ while("netstat -an& ...

  7. weblogic每天日志合并shell脚本 [个人记录]【转】【补】

    from RogerZhu modified by King sh logback.rb "/data/logs/" "/tmp/domain" "a ...

  8. Linux常用命令及shell脚本

    一.     用户管理(添加用户.切换用户.删除用户) ~                                                                        ...

  9. Linux Shell脚本入门--awk命令详解

    简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 ...

随机推荐

  1. lightoj 1085【离散化+树状数组】

    题意: 求所有的上升子序列种数: 思路: 我想先离散化一下,然后用树状数组维护一下. 最终答案就是sum(n) ? 卧槽,好像是:然后就过了.. #include <bits/stdc++.h& ...

  2. Root Motion深度解析[Unity]

    http://blog.csdn.net/cubesky/article/details/39478207 在很多动画当中,模型的位置.角度往往会发生变化,我们需要决定是否将模型再动画中发生的这些变换 ...

  3. qscoj53(图的m着色问题)

    题目链接:http://qscoj.cn/contest/12/problem/53/ 题意:中文题诶- 思路:n个点, 那么最多用n种颜色,所以我们可以枚举颜色种类1~n,然后再判断用 i 种颜色可 ...

  4. 字符条件变成in条件格式数据

    private string getInQuerySql(string query) { string resulr = ""; foreach (var item in quer ...

  5. Java | 基础归纳 | 静态方法与实例方法的区别

    静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方 ...

  6. Day2课后作业:sed替换程序

    #!/usr/bin/env python #_*_conding:utf-8_*_ import sys,os old_file = sys.argv[1] new_file = sys.argv[ ...

  7. 洛谷P1896||bzoj1087 [SCOI2005]互不侵犯

    bzoj1087 洛谷P1896 想了很久,太久没做状压都已经不会了... 状压每一行就好了 #include<cstdio> #include<algorithm> #inc ...

  8. (洛谷P2512||bzoj1045) [HAOI2008]糖果传递 || 洛谷P4016 负载平衡问题 || UVA11300 Spreading the Wealth || (洛谷P3156||bzoj3293) [CQOI2011]分金币

    bzoj1045 洛谷P4016 洛谷P2512 bzoj3293 洛谷P3156 题解:https://www.luogu.org/blog/LittleRewriter/solution-p251 ...

  9. Python enumerate() 函数----枚举

    描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. Python 2.3. 以上版本可用,2. ...

  10. struts2的@Result annotation 如何添加params,并且在页面取值

    http://www.bubuko.com/infodetail-2492575.html .............................................. 标签:lai  ...