awk для сравнения нескольких столбцов в 2 файлах - PullRequest
0 голосов
/ 05 сентября 2018

Я хотел бы сравнить несколько столбцов из 2 файлов, а НЕ печатать строки, соответствующие моим критериям. Примером этого может быть:

file1

apple  green  4
orange  red  5
apple  yellow 6
apple  yellow 8
grape  green 5

file2

apple  yellow 7
grape  green 10

выход

apple  green  4
orange  red  5
apple  yellow 8

Я хочу удалить строки, в которых $1 и $2 из file1 соответствуют $1 и $2 из file2 И когда $3 из file1 меньше $3 из file2. Теперь я могу выполнить только первую часть работы, то есть удалить строки, в которых $1 и $2 из file1 соответствуют $1 и $2 из file2 (поля разделены вкладками):

awk -F '\t' 'FNR == NR {a[$1FS$2]=$1; next} !($1FS$2 in a)' file2 file1

Не могли бы вы помочь мне применить последнее условие?

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Что вы ищете после этого:

awk '(NR==FNR){a[$1,$2]=$3; next}!(($1,$2) in a) && a[$1,$2] < $3))' <file2> <file1>
0 голосов
/ 05 сентября 2018

Сохранить 3-е значение поля при построении массива, а затем использовать его для сравнения

$ awk -F '\t' 'FNR==NR{a[$1FS$2]=$3; next} !(($1FS$2 in a) && $3 > a[$1FS$2])' f2 f1
apple   green   4
orange  red 5
apple   yellow  6
grape   green   5

Лучше записано как:

awk -F '\t' '{k = $1FS$2} FNR==NR{a[k]=$3; next} !((k in a) && $3 > a[k])' f2 f1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...