Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于不同第一列的所有列的最大值_Bash - Fatal编程技术网

Bash 基于不同第一列的所有列的最大值

Bash 基于不同第一列的所有列的最大值,bash,Bash,如果我有两个以上的列,如何更改代码。假设数据是这样的 ifile.dat 1 10 15 3 34 20 1 4 22 3 32 33 5 3 46 2 2 98 4 20 100 3 13 23 4 50 65 1 40 76 2 20 22 我如何做到这一点 ofile.dat 1 40 76 2 20 98 3 34 33 4 50 100 5 3 46 通过比较第一列,我指的是每列

如果我有两个以上的列,如何更改代码。假设数据是这样的

ifile.dat
1   10  15
3   34  20
1   4   22
3   32  33
5   3   46
2   2   98
4   20  100
3   13  23
4   50  65
1   40  76
2   20  22
我如何做到这一点

ofile.dat
1   40  76
2   20  98
3   34  33
4   50  100
5   3   46
通过比较第一列,我指的是每列的最大值。谢谢

下面是我在一个包含13列的示例文件中尝试的内容。但最高值不是这样出现的

cat input.txt | sort -k1,1 -k2,2nr -k3,3nr -k4,4nr -k5,5nr -k6,6nr -k7,7nr -k8,8nr -k9,9nr -k10,10nr -nrk11,11 -nrk12,12 -nrk13,13 | sort -k1,1 -u 
您可以切换到更健壮的东西,如awk,而不是依赖于排序:


非常感谢。下面是ubuntu和mac上出现的一个错误。awk:BEGIN{PROCINFO[sorted_in]=@val_num_asc}{fori=2;我刚刚在一个稍旧的Ubuntu版本上尝试了这个功能,它很有效,但是…它可能只是awk版本。尝试将它翻转到gawk,因为asorti肯定是gawk函数,看看它是否让它开心。感谢指针。仍然是一样的。错误被指向>>>ifa[$1][这可能是一条死胡同,除非有更多posix合规知识的人介入发现错误。awk'BEGIN{PROCINFO[sorted_in]=@val_num_asc}{fori=2;i
 awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_asc"} {for(i=2;i<=NF;++i) if (a[$1][i]<$i){a[$1][i]=$i}} END{n=asorti(a, asorted); for(col1 in asorted){print col1, a[col1][2], a[col1][3]}}' input.txt 
:~$ cat test
1   10  15
3   34  20
1   4   22
3   32  33
5   3   46
2   2   98
4   20  100
3   13  23
4   50  65
1   40  76
2   20  22
:~$ awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_asc"} {for(i=2;i<=NF;++i) if (a[$1][i]<$i){a[$1][i]=$i}} END{n=asorti(a, asorted); for(col1 in asorted){print col1, a[col1][2], a[col1][3]}}' test
1 40 76
2 20 98
3 34 33
4 50 100
5 3 46