1-е решение: Не могли бы вы попробовать следующее.
awk '
{
a[$3]=$NF>a[$3]?$NF:a[$3]
b[$3,$NF]=$1 OFS $2
}
END{
for(i in a){
print b[i,a[i]],i,a[i]
}
}' Input_file
2-е решение: После будетпозаботьтесь о том, чтобы выходная последовательность $ 3 (3-е поле) была такой же, как в 3-й последовательности полей Input_file.
awk '
!c[$3]++{
d[++count]=$3
}
{
a[$3]=$NF>a[$3]?$NF:a[$3]
b[$3,$NF]=$1 OFS $2
}
END{
for(i=1;i<=count;i++){
print b[d[i],a[d[i]]],d[i],a[d[i]]
}
}' Input_file
Объяснение приведенного выше кода:
awk '
!c[$3]++{ ##Checking condition if array c with index $3 of current line is coming first time in array c if this is TRUE then assign it $3 as an index current line.
d[++count]=$3 ##Creating an aray d whose index as count variable value which will increment each time cursor comes here and assigning value of this array d to $3 here.
} ##Closing block for array c here.
{ ##Starting block which will execute in all the lines for Input_file.
a[$3]=$NF>a[$3]?$NF:a[$3] ##Creating an array named a whose value is $NF of current line if value of $NF>a[$3] else it is NOT changing.
b[$3,$NF]=$1 OFS $2 ##Creating an array b whose index is $3,$NF and value will be $1 OFS $2.
} ##Closing block here.
END{ ##Starting END block of awk program here.
for(i=1;i<=count;i++){ ##Starting a for loop from i=1 to till value of count here.
print b[d[i],a[d[i]]],d[i],a[d[i]] ##Printing value of array b whose index is d[i], array a whose index is d[i] value AND value of d[i].
} ##Closing block for, for loop now.
}' Input_file ##Mentioning Input_file name here.
РЕДАКТИРОВАТЬ: Добавление причины, почему попытка OP не работает.
Код OP:
awk '{if (a[$3] < $4) {a[$3]=$4;b[$0]=a[$3]}} END {PROCINFO["sorted_in"] = "@ind_num_asc" ;for (i in b) {print i, b[i]}}' file1.txt
Объяснение ИМХО, почему код не работает: Поскольку значения массива b НИКОГДА не удаляются или не изменяются (всякий раз, когда значение 3-го столбца меньше или больше его предыдущих значений), поэтомуэто причина, по которой вы проходите через массив b
, тогда он печатает все значения массива b.Нам нужно менять значение массива b всякий раз, когда значение для 3-го поля меньше его предыдущего значения.