2014-09-10 3 views
1

Я пытался понять это весь день. Любая помощь будет оценена по достоинству.Заменить значение из одного файла значением из другого файла в linux

файлA имеет следующие данные.

a bal=45 
b bal=40 
c bal=55 
d bal=65 

FILEB имеет следующие

a type ppm func,bal=#,oth,new 
b type ppm,bal=#,oth,new 
c type ppm func,bal=#,oth,new 
d type ppm,bal=#,oth,new 

Я пытаюсь найти способ заменить BAL = # в FILEB со значением БАЛ = XX в FiLea путем сопоставления первого столбца обоих файлов ,

Вывод будет выглядеть так:

a type ppm func,bal=45,oth,new 
b type ppm,bal=40,oth,new 
c type ppm func,bal=55,oth,new 
d type ppm,bal=65,oth,new 

FILEB является как пространство и через запятую и столбец Ь = # в не будет одинаковым для всех строк.

ответ

0

Использование awk:

$ awk -v OFS="," 'NR==FNR{a[$1]=$2;next}{split($1,t,/ /);$2=a[t[1]]}1' fileA FS="," fileB 
a type ppm func,bal=45,oth,new 
b type ppm,bal=40,oth,new 
c type ppm func,bal=55,oth,new 
d type ppm,bal=65,oth,new 

Мы установили разделитель выходного поля для ,. Мы читаем файлA в массив a, имеющий ключ как столбец1 и значение как column2, используя конструкцию NR==FNR и next. После того, как файл был загружен, мы переходим ко второму файлу. Мы разделили первый столбец на пространство с помощью функции split. Мы устанавливаем второй столбец в значение из массива и печатаем строку, используя 1, который по умолчанию печатает строку.

Обратите внимание: мы устанавливаем разделитель полей ввода на , для второго файла, помещая его прямо перед именем файла в конце.

+1

Отлично работает. Спасибо. – mmm