- 论坛徽章:
- 0
|
从别处看到有人问一个问题:
一个1万5000多行的文件,如下- 294;F03;2000;40441
- 294;F03;2000;40443
- 284;F01;5400;44051
- 284;F01;5700;45666
- 294;F03;2001;40443
复制代码 要求输出第1,2,4列相同,第3列不同的行。比如上面应该输出1和4行:- 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维数组,类似 (非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来拼下标 |
|