linux – unix – 文件中每列的max(长度)
发布时间:2020-12-14 00:51:52 所属栏目:Linux 来源:网络整理
导读:给定一个包含这样数据的文件(即stores.dat文件) sid|storeNo|latitude|longitude2tt|1|-28.0372000t0|153.429216709|2t|-33tt.85t09t0000|15t1.03274200 期望的输出: sid : 3storeNo : 2latitude : 16longitude : 13 返回每列下值的最大长度的语法是什么?
给定一个包含这样数据的文件(即stores.dat文件)
sid|storeNo|latitude|longitude 2tt|1|-28.0372000t0|153.42921670 9|2t|-33tt.85t09t0000|15t1.03274200 期望的输出: sid : 3 storeNo : 2 latitude : 16 longitude : 13 返回每列下值的最大长度的语法是什么? 我试过这个,但它不起作用: nawk 'BEGIN { FS = "|" } { for(n = 1; n <= NF; n++) { if (length($n) > max) max = length($n) maxlen[$n] = max } } END { for (i in maxlen) print "col " i ": " maxlen[i] } ' stores.dat 更新(感谢Mat的回答 – 我已经解决了这个问题): awk -F"|" ' NR==1{ for(n = 1; n <= NF; n++) { colname[n]=$n } } NR>1{ for(n = 1; n <= NF; n++) { if (length($n)>maxlen[n]) maxlen[n]=length($n) } } END { for (i in colname) { print colname[i],":",maxlen[i]+0; } } ' filename 解决方法
您的脚本存在一些问题 – 最大值在列之间共享,而您根本不处理标题行.请尝试以下方法:
$cat t.awk #!/bin/awk -f NR==1{ for(n = 1; n <= NF; n++) { colname[n]=$n } } NR>1{ for(n = 1; n <= NF; n++) { if (length($n)>maxlen[n]) maxlen[n]=length($n) } } END { for (i in maxlen) { print colname[i],maxlen[i]; } } $awk -F'|' -f t.awk stores.dat $n指第n列的内容. n是列号(在第一个和第二个循环中).最后一个循环只显示了一种在awk中迭代数组的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |