awk, чтобы изменить поле на совпадение с другим - PullRequest
0 голосов
/ 22 октября 2019

Ниже я пытаюсь обновить / изменить содержимое $1 в f2, если есть совпадения в $2 из f2 и $1 из f1. Если совпадений нет, строка печатается как f2. Ниже приводятся две запятые, но значение $1 остается неизменным. Спасибо:).

awk 'FNR==NR { a[$1]=$2; next } { if(a[$2]){$1=a[$2] }; print }' OFS="," 

gawk '{
    if(NR==FNR){
            a[$1]=$2;
            next
    }
    if($2 in a){
            $1=a[$2];
            print $0
    }
     else {
            print $0
    }
}' OFS="," f1 f2

f1 tab-delimited

file1   header
xxxx:7230   aaa11
xxxx:7231   yyyyy
xxxx:25478  zzzz

f2 comma-delimited

header1
header2
aaa11c,xxxx:7230,111,x1 111,yes
yyyyy,xxxx:7325,222,x2 222,
zzzz,xxxx:7329,222,x3 333,

желаемый

header1
header2
aaa11,xxxx:7230,111,x1 111,yes
yyyyy,xxxx:7325,222,x2 222,
zzzz,xxxx:7329,222,x3 333,

1 Ответ

2 голосов
/ 22 октября 2019

В основном вы просто забыли установить ФС для каждого файла:

awk 'NR==FNR{a[$1]=$2; next} $2 in a{$1=a[$2]} 1' FS='\t' file1 FS=',' OFS=',' file2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...