два файла, который имеет имя компонента и номер версии, разделенных пробелом:AWK сценария не работает
cat file1
com.acc.invm:FNS_PROD 94.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.1.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.9
com.acc.invm:SendEmail 29.6.113
com.acc.invm:SendSms 12.23.65
cat file2
com.acc.invm:FNS_PROD 94.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.0.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.10
com.acc.invm:SendEmail 29.60.113
com.acc.invm:SendSms 133.28.65
com.acc.invm:distri_cob 110
нужен результат: Все компоненты из file2 с более высокой версии, чем в file1.
Мы должны игнорировать компоненты из файла2, если это не в файле1, и компоненты с одинаковой версией и более низкой версией в файле1.
В этом примере желаемый выход
com.acc.invm:FNS_APIPlat_BDMap 100.0.10
com.acc.invm:SendEmail 29.60.113
com.acc.invm:SendSms 133.28.65
попробовал этот AWK код, но получение данных из file2 также
cat rst.awk
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] }
NR==FNR { prev[$1] = curr; next }
(curr > prev[$1]) || !($1 in prev)
/usr/bin/nawk -f rst.awk file1 file2
ВЫХОД:
com.acc.invm:FNS_APIPlat_BDMap 100.0.10
com.acc.invm:SendEmail 29.60.113
com.acc.invm:SendSms 133.28.65
com.acc.invm:distri_cob 110
спасибо Vaughan :) – rKSH
в настоящее время я звоню /usr/bin/nawk -f rst.awk file1 file2 в моем скрипте, это можно написать содержимое rst.awk в самом скрипте? После этого мне не нужно проверять файл rst.awk каждый раз, когда присутствует файл rst.awk погоды или нет. Помощь с использованием – rKSH
@ RakeshSinghTomar: см. Http://www.cyberciti.biz/faq/bash-scripting-using-awk/ –