Вывести, если col2 больше, чем col2 в последней строке - PullRequest
1 голос
/ 10 ноября 2019

Я хочу использовать awk для извлечения строки с большим значением столбца, чем в последней строке.

пример данных, подобных этому

a 3
a 5
a 4
b 1
c 2
c 3
c 6

Я пытаюсь использовать приведенную ниже команду, но не сработало

awk '{if(($1!=a) || ($1==a && $2>b)){getline; print}};{a=$1;b=$2}'

ожидаемый результат:

a 3
a 5
b 1
c 2
c 3
c 6

должна быть удалена только строка "4", поскольку 4 меньше 2-го столбца последней строки (5).

Но фактический результат из моего кода:

a 5
c 2
c 6

Как я могу решить это? Спасибо

Ответы [ 2 ]

5 голосов
/ 10 ноября 2019

Вот один из них:

$ awk '$1!=p1 || $2>p2; {p1=$1;p2=$2}' file
a 3
a 5
b 1
c 2
c 3
c 6

Если $1 изменяется или $2 больше, чем в предыдущем раунде, выведите .

Общее решение для дополнительных полей, см. в этом комментарии ниже.

1 голос
/ 10 ноября 2019

Не могли бы вы попробовать следующее (если вы НЕ ищете того же значения 1-го поля, которое нужно сравнить).

awk '$2>prev; {prev=$2}' Input_file


В случае, если вы хотите найти сравнения 1-го поля того же полясо значениями 2-го поля затем попробуйте следующее.

awk 'prev_1st!=$1 || prev!=""; $2>prev && prev_1st==$1; {prev=$2;prev_1st=$1}' Input_file

Объяснение: Добавление пояснения к приведенному выше коду.

awk '                        ##Starting awk program here.
prev_1st!=$1 || prev!=""     ##Checking condition if prev_1st variable NOT equal to $1 OR variable prev is NULL then simply print the line.
$2>prev && prev_1st==$1      ##Checking condition if $2 is greater than prev AND prev_1st equals to $1 then print the line.
{
  prev=$2                    ##Creating variable prev and setting its value to $2.
  prev_1st=$1                ##Creating variable prev_1st and setting its value to $1.
}
' Input_file                 ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...