逐行比较两个文件,并使用shell脚本查找最大和最小的数字

时间:2014-02-18 21:21:25

标签: linux shell unix

我有两个文件,每行都有一个数字,需要比较两个文件才能找到最大和最小的数字。

例如: -

文件1

2
34
5

file2的

44
5
66
4

需要将66作为最大数字,将2作为最小数字。

如果有人引导我了解我需要关注的命令,那么在我开始学习shell脚本时,这将是一个帮助。

4 个答案:

答案 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