我熟悉使用bash连续比较数字,但如果我想比较列怎么办?就像我有一个文件
4 2 5 7
6 1 3 8
我想找到每列中最大的
6 2 5 8
我怎么能用awk做到这一点?
答案 0 :(得分:4)
假设您的数据位于名为“data”的文件中:
$ awk '{for(j=1;j<=NF;++j){max[j]=(max[j]>$j)?max[j]:$j};mNF=mNF>NF?mNF:NF} END{for(j=1;j<=mNF;++j)printf " " max[j]; print "" }' data
6 2 5 8
或者,使用不同的输出格式:
$ awk '{for(j=1;j<=NF;++j){max[j]=(max[j]>$j)?max[j]:$j};mNF=mNF>NF?mNF:NF} END{for(j=1;j<=mNF;++j)print "max of column " j "=" max[j]}' data
max of column 1=6
max of column 2=2
max of column 3=5
max of column 4=8
上述awk
计划的正文包括:
{ for(j=1;j<=NF;++j) {max[j]=(max[j]>$j)?max[j]:$j};mNF=mNF>NF?mNF:NF }
此循环针对输入文件中的每一行运行。循环遍历该输入行中的每个列(字段),从1到字段数(NF
)。对于每列,它会检查当前值是否大于先前的最大值。如果是,则更新max
数组中的值。
答案 1 :(得分:2)
使用数组的Bash解决方案:
max=();
while read -a line ; do
for ((i=0; i<${#line[@]} ; i++)) ; do
((line[i]>max[i])) && max[i]=${line[i]}
done
done < input
echo "${max[@]}"