Vlookup с помощью команды awk - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть два файла на моем сервере Linux.

Файл 1

9190784
9197256
9170546
9184139
9196854

Файл 2

S NO.,Column1,Column2,Column3
72070,9196854,TGM,AP
72071,9172071,BGM,MP
72072,9184139,AGM,KN
72073,9172073,TGM,AP

Я хочу написать скрипт или одну строкувведите команду bash с помощью команды awk, поэтому любой элемент в файле -1 должен совпадать со столбцом 1 в файле -2 и вывести столбцы 1, столбец 2 и столбец 3.Также, если какая-либо запись не найдена, она должна напечатать запись из файла 1 и напечатать NA в столбце 2 и столбце 3

Вывод: она должна перенаправить вывод в новый файл, как показано ниже.new_file

9190784,TGM,AP
9197256,NA,NA
9170546,NA,NA
9184139,AGM,KN
9196854,TGM,AP

Надеюсь, вопрос понятен.Любой, пожалуйста, помогите мне в том же.

Ответы [ 2 ]

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

Должен ли это быть awk?Это делается с помощью join:

Имеется два файла:

echo '9190784
9197256
9170546
9184139
9196854' >file2

echo 'S NO.,Column1,Column2,Column3
72070,9196854,TGM,AP
72071,9172071,BGM,MP
72072,9184139,AGM,KN
72073,9172073,TGM,AP' > file1

Можно присоединить on , в качестве разделителя во втором поле первого файла1 -12, удалив первый заголовокстрока tail -n +2 и отсортированная по второму полю sort -t, -k2 с первым полем из второго файла -21 sorted sort.

join -t, -12 -21 -o1.2,1.3,1.4 <(tail -n +2 file1 | sort -t, -k2) <(sort file2)

выведет:

9184139,AGM,KN
9196854,TGM,AP
0 голосов
/ 16 сентября 2018

стандартная операция соединения с awk

$ awk 'BEGIN   {FS=OFS=","} 
       NR==FNR {a[$2]=$3 OFS $4; next} 
               {print $1, (($1 in a)?a[$1]:"NA" OFS "NA")} file2 file1

вариация подстроки (не проверено)

$ awk 'BEGIN   {FS=OFS=","} 
       NR==FNR {a[substr($2,1,7)]=$3 OFS $4; next} 
               {key=substr($1,1,7);
                print $1, ((key in a)?a[key]:"NA" OFS "NA")} file2 file1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...