查找最大值和最小值并从文件中打印行

hac*_*kio 13 unix linux bash shell awk

我有一个在第一列有数字的文件.

100,red
101,blue
102,black
Run Code Online (Sandbox Code Playgroud)

我应该编写一个shell脚本,它将使用max和min编号打印该行.

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
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止尝试找到最大值.

小智 30

对于最小值:

[bash]$ cut -f1 -d"," file_name | sort -n | head -1
Run Code Online (Sandbox Code Playgroud)

最大值:

[bash]$ cut -f1 -d"," file_name | sort -n | tail -1
Run Code Online (Sandbox Code Playgroud)

  • 你好,你可以试试这个: awk -v max=0 '{if($1>max){want=$2; max=$1}}END{打印想要} ' 文件名 (2认同)

loe*_*tar 11

或者使用sort和sed

$ sort -n id | sed -n '1p;$p'
100 red
102 black
Run Code Online (Sandbox Code Playgroud)

-n flag - 按数字排序.

如何使用它:

$ 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
Run Code Online (Sandbox Code Playgroud)


Chr*_*our 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
Run Code Online (Sandbox Code Playgroud)

如果你不这样做:

$ 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
Run Code Online (Sandbox Code Playgroud)

或者预先打印并打印第一行和最后一行:

$ sort -t',' -nk1 file | awk 'NR==1;END{print}'
100,red
102,black
Run Code Online (Sandbox Code Playgroud)