gpt4 book ai didi

linux - unix - 文件中每列的最大(长度)

转载 作者:IT王子 更新时间:2023-10-29 01:10:41 25 4
gpt4 key购买 nike

给定一个包含这样数据的文件(即 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

最佳答案

您的脚本存在一些问题 - max 在列之间共享,您根本没有处理标题行。尝试以下操作:

$ 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 中迭代数组的方法。

关于linux - unix - 文件中每列的最大(长度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com