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中迭代数组的方法.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。