【发布时间】:2018-06-05 13:03:38
【问题描述】:
我有这个输入:
1 happy,t,c,d
2 t,c
3 e,fgh,k
4 yk,j,f
5 leti,j,f,g
我想打印最大项目的长度(用逗号作为分隔符),它应该产生:
1 5,1,1,1
2 1,1
3 1,3,1
4 2,1,1
5 4,1,1,1
然后我想为最终创建的第二列选择最大值:
1 5
2 1
3 3
4 2
5 4
如何在awk 中执行此操作?
1) 对于我尝试的第一个任务:
awk -v col=$2 -F',' '{OFS=","; for(i=1; i<=NF; i++) print length($i);}' test.data.txt
没有输出正确的数据:
7
1
1
1
3
1
3
3
1
4
1
1
6
1
1
1
唯一的问题是我无法正确使用-v 选项来仅读取该列。因此,我将所有数据放在一列中,并从 column1 和 column1 和 column2 之间添加(从长度)值。
2) 要选择最大值,我在做:
awk -F',' '{OFS="\t"; m=length($1); for(i=1; i<=NF; i++) if (length($i) > m) m=length($i); print m}' test.data.txt
这可以正常工作,但由于第一列的存在,值被添加到给我的最大值:
7
3
3
4
6
代替:
5
1
3
2
4
最后,我想一次性合并这两个过程。有什么改进建议吗?
【问题讨论】: