一个例子,另关于awk 的二维数组操作一问。
时间:2011-03-14
来源:互联网
从别处看到有人问一个问题:
一个1万5000多行的文件,如下
复制代码
要求输出第1,2,4列相同,第3列不同的行。比如上面应该输出1和4行:
复制代码
我是这么做的,觉得比较笨。不知道有没有更好点的办法。
复制代码
我最初想法是,弄一个2维数组,类似 (非AWK code,就说明个意思) a[$1$2$4][$3], 然后遍历第一维是[$1$2$4]第2维个数大于1的所有元素并打印。但是不知道怎么折腾这个二维数组。
比如2维下标都是字符串,怎么 array[a,b], [a,c] ...[a,x], 怎么获得有多少元素第一下标是a的?要是2个下标都是变量构成比如[$1,$2],怎么做如下遍历:
[a,b]
[a,c]
...
[a,x]
[b,b]
[b,c]
...
[b,x]
...
google了也没找到合适的,都是说用split来拼下标
一个1万5000多行的文件,如下
- 294;F03;2000;40441
- 294;F03;2000;40443
- 284;F01;5400;44051
- 284;F01;5700;45666
- 294;F03;2001;40443
- 294;F03;2000;40443
- 294;F03;2001;40443
- awk -F';' '{a[$1 FS $2 FS $4]=a[$1 FS $2 FS $4]?a[$1 FS $2 FS $4]","$3:$3;} END { for (k in a ){ if( split(a[k],t,",")>1 ){ split(k,h,FS); for (i in t) print h[1] FS h[2] FS t[i] FS h[3] } } }' t.txt
比如2维下标都是字符串,怎么 array[a,b], [a,c] ...[a,x], 怎么获得有多少元素第一下标是a的?要是2个下标都是变量构成比如[$1,$2],怎么做如下遍历:
[a,b]
[a,c]
...
[a,x]
[b,b]
[b,c]
...
[b,x]
...
google了也没找到合适的,都是说用split来拼下标
作者: sk1418 发布时间: 2011-03-14
回复 sk1418
复制代码
- awk -F ';' '{a[$1","$2","$4]++;b[$1","$2","$4"#"$3]=$0}END{for (i in b) {split(i,m,"#");if (a[m[1]]>1) print b[i]}}' file
作者: ywlscpl 发布时间: 2011-03-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28