0

我想要一份显示工资范围的报告。我已经尝试了下面的代码,但它一直在计算文本文件中的所有数据而没有先搜索范围,请告知可以改进的地方。

文本

3,Frank,CFO,91111453,Salaried,2333
1,Mary,CEO,93424222,Salaried,1111
5,John,Sales user,9321312,Commission,9999
7,Chris,Admin,98888753,Hourly,122

结果 [我想要的输出]

Range       total number
1-1000      1
1001-2000   2

代码:

  echo "range       Total"
   awk '{t==$6}END{ if (t < 1001) count++ } END { print "$0 - 999\t\t"count }' $file
   awk '{t==$6}END{ if (1001<$6<2000) count++ } END { print "$1000 - 2999\t\t"count }' $file
4

3 回答 3

1

试试这个 awk 程序

BEGIN {
    FS=","
    OFS="\t"
    print "Range    ", "total number"
}
{
    ranges[int($6 / 1000)*1000]++
}
END {
    for (r in ranges)
        print r "-" (r+999) ":", ranges[r]
}
于 2013-11-07T13:10:16.067 回答
0

纯重击:

#!/bin/bash

while read LINE
do
    LINE=${LINE##*,}
    [[ ${LINE} -ge 1    ]] && [[ ${LINE} -le 1000 ]] && (( ++RANGE1 ))
    [[ ${LINE} -ge 1001 ]] && [[ ${LINE} -le 2000 ]] && (( ++RANGE2 ))
done < "/path/to/report"

echo "
Range        total number
1 - 1000     ${RANGE1}
1001 - 2000  ${RANGE2}
"
于 2013-11-11T23:11:14.200 回答
0

也许您希望拥有任意数量的范围,而不仅仅是两个(纯 bash):

#!/bin/bash

#calculating
while read LINE
do
    LINE=${LINE##*,} ; (( ++RANGE[LINE /= 1000] ))
done < "/your/file/here"

#printing
echo -e "Range\t\ttotal number"
for NR in {0..10}
do
    echo -e "${NR}001 - $(( $NR + 1 ))000\t${RANGE[$NR]}"
done
于 2013-11-11T23:41:35.220 回答