我有两个文件,每行都有一个数字,需要比较两个文件才能找到最大和最小的数字。
例如: -
文件1
2
34
5
file2的
44
5
66
4
需要将66作为最大数字,将2作为最小数字。
如果有人引导我了解我需要关注的命令,那么在我开始学习shell脚本时,这将是一个帮助。
答案 0 :(得分:5)
您可以使用:
sort -n file1 file2 > _sorted.tmp
min=$(head -1 _sorted.tmp)
max=$(tail -1 _sorted.tmp)
没有临时文件:
arr=( $(sort -n file1 file2) )
min=${arr[1]}
max=${arr[@]:(-1)}
答案 1 :(得分:2)
连锁反应:
sort --numeric --unique nu1 nu2 | sed '/^$/d' | sed -n '1p;$p'
| | | | | | | | |
| | | | | | | | +---- print last
| | | | | | | +------- print first
| | | | | | +----------- no print
| | | | | +----------------------- remove empty
| | | | +------------------------------------ file2
| | | +--------------------------------------- file1
| | +---------------------------------------------- unique
| +-------------------------------------------------------- numeric
+--------------------------------------------------------------- sort
如果您100%确定任何文件中没有空行,则可以删除sed '/^$/d'
部分。如果是,则unique
也可以从sort
中移除。
换句话说,满足这两个标准也是有效的:
sort --numeric nu1 nu2 | sed -n '1p;$p'
与简短版本一样:
sort -n nu1 nu2 | sed -n '1p;$p'
答案 2 :(得分:1)
如果您不想存储值
,也可以是一个班轮sort -n file1 file2 |头-1 sort -n file1 file2 |尾巴-1
答案 3 :(得分:0)
使用awk
:
$ head f1 f2
==> f1 <==
10
32
14
==> f2 <==
9
42
4
$ awk 'NR==1{min=$1;max=$1}
{max=(max>$1)?max:$1;min=(min<$1)?min:$1}
END{print "max is: "max; print "min is: "min}' f1 f2
max is: 42
min is: 4