关于在bash中使用文件进行输入的家庭作业

关于在bash中使用文件进行输入的家庭作业,bash,scripting,Bash,Scripting,所以基本上我被分配了这个家庭作业,我必须制作一个bash脚本,它从一个数字文件中获取输入,然后输出较大的数字,较小的数字,它们的总和和平均值 我试着用一种简单的方式来做这件事,他告诉我们用一种方式来做./bashscript

所以基本上我被分配了这个家庭作业,我必须制作一个bash脚本,它从一个数字文件中获取输入,然后输出较大的数字,较小的数字,它们的总和和平均值

我试着用一种简单的方式来做这件事,他告诉我们用一种方式来做./bashscript 如果我要输入一个.txt文件,该文件包含: 3. 4. 5. 3. 2. 一,

它应该给我更大的帮助:5 较小者:1 金额:6
平均值为:3这并不太复杂,它显示了在shell脚本中使用AWK有多好

开始部分在awk逐行处理文件之前执行。 结束部分在awk处理整个输入文件后执行

重要的是用文件中找到的第一个数字指定最小值和最大值。否则: 如果文件中只有大于0的数字,则最小值将始终为零 b即使文件只有一个数字/行,也要为max指定一个有效数字

$\表示AWK正在处理的实际行

#! /bin/sh

# script.sh - awk script embedded into shell script

awk 'BEGIN {
        count=0
} {
        if (NR == 1) {
                min=$_
                max=$_
        }
        if ($_ < min) {
                min=$_
        }
        if ($_ > max) {
                max=$_
        }
        sum+=$_
        count++
} END {
        printf ("min=%d\n", min)
        printf ("max=%d\n", max)
        printf ("avg=%d\n", sum/count)
}'
用法:

$ cat datafile
2
1
4
5
3

$ chmod +x script.sh
$ ./script.sh < datafile
min=1
max=5
avg=3


你是说像这样的

#!/bin/bash

# read data from stdin
read -r data

# read numbers into array
IFS=' ' arr=($data)

# initialize max and min with first number
max=${arr[0]}
min=${arr[0]}

# loop over all numbers
for value in "${arr[@]}"; do

   # if value greater then max, save value as max
   [[ $value > $max ]] && max="$value"

   # if value lower than min, save value as min
   [[ $value < $min ]] && min="$value"

   # sum values
   (( sum += value ))
done   

# get count of array entries
amount="${#arr[@]}"

# calculate average
(( avr = sum / amount ))

# print output
printf "the greater: %d the smaller: %d the amount: %d average: %d\n" "$max" "$min" "$amount" "$avr"
script.sh < a.txt
the greater: 5 the smaller: 1 the amount: 6 average: 3