скрипт оболочки вырезать и помочь с помощью - PullRequest
0 голосов
/ 14 сентября 2010

у меня 2 двух файла

$cat file1.txt
 field1=value1
 field2=value2
 field3=value3
 ::
 ::

 $cat file2.txt
 something.field1.some
 otherthing.field2.anything
 anything.field3.something

Мне нужно прочитать file1.txt и проверить, является ли file2.txt для поля N и заменить его значением N

так что результат будет

  something.value1.some
  otherthing.value2.anything
  anything.value3.something

Ответы [ 3 ]

4 голосов
/ 14 сентября 2010

Если в ваших полях и значениях нет специальных символов sed -типа, вы можете использовать meta-sed подход:

pax> sed -e 's/^/s\/\\./' -e 's/=/\\.\/./' -e 's/$/.\/g/' file1.txt >x.sed
pax> sed -f x.sed file2.txt

something.value1.some
otherthing.value2.anything
anything.value3.something

Если вы посмотрите на файл x.sed, вы увидите, что первая sed просто составляет список sed команд, которые должны быть выполнены для вашего второго файла.

2 голосов
/ 14 сентября 2010

используйте awk

$ awk -F"[=.]" 'FNR==NR{a[$1]=$2;next}{$2=a[$2]}1' OFS="." file1 file2
something.value1.some
otherthing.value2.anything
anything.value3.something
0 голосов
/ 14 сентября 2010

Это, к сожалению, требует сортировки файлов:

tr = . < file1.txt | join -t . -1 1 -2 2 -o 2.1 1.2 2.3 - file2.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...