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]
(因为提取数组下标是一个不规则的输出,因此这个结果可能是随机排序)
第二种解法

shell脚本,awk合并一列的问题。的更多相关文章
- linux awk命令详解,使用system来内嵌系统命令, awk合并两列
		
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
 - shell脚本 awk工具
		
awk工具概述awk编程语言/数据处理引擎基于模式匹配检查输入文本,逐行处理并输出通常在shell脚本中,或取指定的数据单独用时,可对文本数据做统计 命令格式格式一:awk [选项] '[条件]{编辑 ...
 - shell脚本 awk实现实时监控网卡流量
		
一.简介 通过第3方工具获得网卡流量,这个大家一定很清楚.其实通过脚本一样可以实现效果.下面是我个人工作中整理的数据.以下是shell脚本统计网卡流量. 现原理: cat /proc/net/dev ...
 - shell脚本——awk
		
目录 一.awk 1.1.awk简介 1.2.基本格式 1.3.工作原理 1.4.常见的内建变量(可直接用) 按字段输出文本 1.5.awk和getline 有重定向符 无重定向符 1.6.指定分隔符 ...
 - 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 ...
 - shell脚本 awk实现查看ip连接数
		
一.简介 处理文本,是awk的强项了. 无论性能已经速度都是让人惊叹! 二.使用 适用:centos6+ 语言:英文 注意:无 awk 'BEGIN{ while("netstat -an& ...
 - weblogic每天日志合并shell脚本 [个人记录]【转】【补】
		
from RogerZhu modified by King sh logback.rb "/data/logs/" "/tmp/domain" "a ...
 - Linux常用命令及shell脚本
		
一. 用户管理(添加用户.切换用户.删除用户) ~ ...
 - Linux Shell脚本入门--awk命令详解
		
简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 ...
 
随机推荐
- C#中的yield return
			
4.1 迭代器块 一个迭代器块(iterator block)是一个能够产生有序的值序列的块.迭代器块和普通语句块的区别就是其中出现的一个或多个yield语句. yield return语句产生迭代的 ...
 - bzoj 3559: [Ctsc2014]图的分割【最小生成树+并查集】
			
读题两小时系列-- 在读懂题意之后,发现M(c)就是c这块最大权割边也就是的最小生成树的最大权边的权值,所以整个问题都可以在MST的过程中解决(M和c都是跟着并查集变的) 不过不是真的最小生成树,是合 ...
 - 有趣的JS存储 连等问题
			
五个月不见了,你是不是和我一样又帅了,今天我们先来看一道经典的关于JS存储的题目,来一场紧张又刺激的脑内吃鸡大战吧: var a = {n:1}; a.x = a = {n:2}; console.l ...
 - mysql 安装和修改编码(utf8mb4)
			
安装mysql(linux 我的环境centos 7) 安装MySQL官方的Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-com ...
 - JSON对象  JSON字符串 JSON数组
			
JSON对象: var str2 = { "name" : "andy", "gender" : "man" , &q ...
 - js字符串与正则匹配
			
这里就说一下具体的使用方法,不做过多的解释. 字符串匹配正则的方法:str.方法(reg) 1.str.search() 参数是正则,将会从开始查找字符串中与正则匹配的字符,并返回该字符的第一次出现的 ...
 - [软件工程基础]PhyLab 功能规格说明书
			
前言 Sigma 团队想要在 PhyLab 上做的增量改进见需求分析.六个功能中只有题库和图文流程需要对界面进行大的改动,剩下的功能在用户看来仅仅是在原有界面上有内容上的扩充,因此不在功能规格说明书的 ...
 - (动态规划)UVA-11400:Lighting System Design
			
You are given the task to design a lighting system for a huge conference hall. After doing a lot of ...
 - java emoji表情存储解决方案
			
1.问题产生情况 我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_general_ci,就是utf-8编码,结果也就报错误了. 2. ...
 - Java .class文件的反编译与反汇编
			
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10840818.html 一:反编译 通常用于第三方JAR包的逆向工程. 一般我们拿到的jar包都是经过编译后 ...