заменить запись1 (поле1) на запись1 (поле2) -> в файле B - PullRequest
0 голосов
/ 07 февраля 2012

Мой вопрос может быть не совсем понятным ... поэтому давайте перейдем к образцам данных ...
FiLea
162400
174402
175404
187 406

FILEB
E-J1-N5,319319,240248,364364 162162
F-J6-N1,380380,250250,360360 162174
E-J6-N2,380380,240240,364374, 175187

Требуемый вывод
E-J1-N5,319319,240248,364364 400400
F-J6-N1,380380,250250,360360 400402
E-J6-N2,380380,240240,364374, 404406

Поэтому мне нужно заменить все вхождения поля field1 (fileA) на field2 (fileA), но в другом файле, fileB (field $ 5).

Вот то, что я хотя мог бы работать. Хранить в двух переменных: recordx (field1) и recordx (field2). Мой НЕ рабочий код:

#!/bin/bash
for record in fileA
   do
        field1=`cut -d, -f 1 $record`
        field2=`cut -d, -f 2 $record`
        awk -v var1=$field1 -v var2=$field2 -F, '{sub(/var1/,"var2",$5);print}' fileB

   done

Я получаю сообщение об ошибке:
awk: невозможно открыть 175 (нет такого файла или каталога)

Почему awk пытается открыть переменную? Я иду в правильном направлении?

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

awk на помощь

awk 'NR==FNR{
       a[$1]=$2
       next
     }
     {
       match($5,/(...)(...)/,b)
       $5=a[b[1]] a[b[2]]
     }1' FS="," OFS="," fileA fileB

Выход

$ awk 'NR==FNR{a[$1]=$2;next}{match($5,/(...)(...)/,b);$5=a[b[1]] a[b[2]]}1' FS="," OFS="," fileA >
E-J1-N5,319319,240248,364364,400400
F-J6-N1,380380,250250,360360,400402
E-J6-N2,380380,240240,364374,404406
0 голосов
/ 08 февраля 2012

Это может сработать для вас (хотя это утомительно и не так элегантно, как решение awk):

sed '/^...,/{H;d};G;G;s/\(...\)\(...\)\n.*\n\1,\(...\).*\n\2,\(...\).*/\3\4/' file{A,B}
E-J1-N5,319319,240248,364364,400400
F-J6-N1,380380,250250,360360,400402
E-J6-N2,380380,240240,364374,404406
  • Заполните записи первого файла (fileA) в области удержания (HS) и затем удалите их.
  • При обнаружении записей для второго файла (файла B) дважды добавьте HS к пространству шаблона (PS).
  • Используйте последние две трехзначные цифры в качестве ключей для поиска номеров в прилагаемых ГС.

N.B. Это предполагает, что все числа в поле 5 файла B будут заменены. Если только некоторые, то поиск / замену нужно разделить на две операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...