我有一个在第一列有数字的文件。
100,red
101,blue
102,black
我应该编写一个shell脚本,它将打印带有最大和最小数字的行。
max=0
cat file.txt|while read LINE
do
fir=`echo $LINE|awk '{print $2}'`
sec=`echo $LINE|awk '{print $3}'`
if [ $fir -gt $max ]; then
max=$fir
fi
if [ $sec -gt $max ];then
max=$sec
fi
done
grep $max file.txt
这是我到目前为止尝试找到最大值
答案 0 :(得分:27)
最小值:
[bash]$ cut -f1 -d"," file_name | sort -n | head -1
最大值:
[bash]$ cut -f1 -d"," file_name | sort -n | tail -1
答案 1 :(得分:11)
或者使用sort和sed
$ sort -n id | sed -n '1p;$p'
100 red
102 black
-n
标志 - 按数字排序。
如何使用它:
$ a=($(sort -n id | sed -n '1s/^\([0-9]\+\).*$/\1/p;$s/^\([0-9]\+\).*$/\1/p'))
$ echo "min=${a[0]}, max=${a[1]}"
min=100, max=102
答案 2 :(得分:5)
如果你有awk
:
GNU awk
中完成整件事
$ awk -F, '{a[$1]=$0}END{asorti(a,b);print a[b[1]]"\n"a[b[NR]]}' file
100,red
102,black
如果你不这样做:
$ awk -F, 'NR==1{s=m=$1}{a[$1]=$0;m=($1>m)?$1:m;s=($1<s)?$1:s}END{print a[s]"\n"a[m]}' file
100,red
102,black
或者预先打印并打印第一行和最后一行:
$ sort -t',' -nk1 file | awk 'NR==1;END{print}'
100,red
102,black
答案 3 :(得分:2)
[bash]$ cat log
100,red
101,blue
102,black
[bash]$ all=( $(sort log | cut -f1 -d',') )
[bash]$ echo "MIN: ${all[0]} and MAX: ${all[${#all[@]}-1]}"
MIN: 100 and MAX: 102
使用已排序的元素创建数组。第一个和最后一个元素包含最小值和最大值
答案 4 :(得分:0)
在CSV压缩文件中
bzcat file.csv.bz2 | cut -f2 -d";" | sort -n | head -2
bzcat file.csv.bz2 | cut -f2 -d";" | sort -n | tail -1
Regadrs,
阿里