我尝试从一列中获取最小值和最大值,但引用其他列。
这是我的输入文件
338043.75 2395256.25 36301 38676 1296
338056.25 2395256.25 36301 38677 1296
338068.75 2395256.25 36301 38678 1296
338081.25 2395256.25 36301 38679 1296
338043.75 2395256.25 36302 38676 1296
338056.25 2395256.25 36302 38677 1296
338068.75 2395256.25 36302 38678 1296
338081.25 2395256.25 36302 38679 1296
338043.75 2395256.25 36303 38676 1296
338056.25 2395256.25 36303 38677 1296
338068.75 2395256.25 36303 38678 1296
338081.25 2395256.25 36303 38679 1296
338043.75 2395256.25 36304 38676 1296
338056.25 2395256.25 36304 38677 1296
338068.75 2395256.25 36304 38678 1296
338081.25 2395256.25 36304 38679 1296
338043.75 2395256.25 36305 38676 1296
338056.25 2395256.25 36305 38677 1296
338068.75 2395256.25 36305 38678 1296
338081.25 2395256.25 36305 38679 1296
目的是在第3列中的值相同时,从第4列中获取最小值和最大值。
那么我想要的输出是这样的
338043.75 2395256.25 36301 38676 1296
338081.25 2395256.25 36301 38679 1296
338043.75 2395256.25 36302 38676 1296
338081.25 2395256.25 36302 38679 1296
338043.75 2395256.25 36303 38676 1296
338081.25 2395256.25 36303 38679 1296
338043.75 2395256.25 36304 38676 1296
338081.25 2395256.25 36304 38679 1296
338043.75 2395256.25 36305 38676 1296
338081.25 2395256.25 36305 38679 1296
我试过这段代码,但它无法正常工作,无法获得所需的输出。
awk ' {D1=substr($3, 1, 5)
D2=substr($4, 6, 5)+0
}
!(D1 in MIN) {MIN[D1]=D2
MAX[D1]=D2
next
}
D2 < MIN[D1] {MIN[D1]=D2}
D2 > MAX[D1] {MAX[D1]=D2}
END {for (m in MIN) print m, MIN[m], MAX[m]}
' file
最佳答案
试试这个
awk '
function set_min() { min[$3] = $4; min_line[$3] = $0 }
function set_max() { max[$3] = $4; max_line[$3] = $0 }
!($3 in min) { set_min(); set_max() }
$4 < min[$3] { set_min() }
$4 > max[$3] { set_max() }
END {
for (key in min) {
print min_line[key]
print max_line[key]
}
}
' file
关于linux - 列中的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50139959/