Выполнение функции Prime Key с использованием Sed в Bash

Я использую bash и пытаюсь использовать команду sed для сопоставления строки и заменять ее другим между двумя файлами.

Цель: заменить все строки [sp_ *], сопоставляя их с другим файлом, содержащим [sp_ * Var_Names]. Следует отметить, что: 1. Порядок синхронизирован, но не последователен в обоих файлах, поэтому нельзя использовать вставку. 2. Функциональность аналогична операции simpleKey в mysql.


Файл 1

+--sp_O00574_ | +--sp_Q9TV16_ | | +--sp_O18983_ | +--| (52) | | | +--sp_Q9BDS6_ | | +--| (26) | | | +--sp_O19024_ | | +--| (29) | | +--sp_Q9XT45_ 

File2

 O00574 CXCR6_HUMAN Q9TV16 CXCR6_PANTR O18983 CXCR6_CHLAE Q9BDS6 CXCR6_MACFA O19024 CXCR6_MACNE Q9XT45 CXCR6_MACMU 

Назначение: для sed -ie '/ O00574 / CXCR6_HUMAN / g' File1

встроенный скрипт Bash:

 cat File2 | while read id; do upID=`echo $id | cut -d " " -f1`; upName=`echo $id | cut -d " " -f2`; sed -ie 's/sp_$upID/$upName/g' File1; done 

Script.sh

 #/bin/bash cat File2 | while read id; do upID=`echo $id | cut -d " " -f1` upName=`echo $id | cut -d " " -f2` sed -ie 's/sp_$upID/$upName/g' File1 done 

Проблема: команда sed не работает в цикле. Никаких изменений в File1 вообще не наблюдается. Если я повторяю команду sed из сценария, а затем запускаю его в терминале, он работает так, как ожидалось. Я не могу понять, в чем проблема.

Благодарим вас за ценные комментарии и решение.

One Solution collect form web for “Выполнение функции Prime Key с использованием Sed в Bash”

сгенерируйте скрипт sed из вашего индексного файла (File2) вместо цикла, затем запустите этот скрипт против вашего File1 .. Это будет МНОГО быстрее :).

  awk '{ print "s/sp_"$1"/"$2"/g"}' File2.txt > tranform.sed 

затем выполните:

  sed -i -f transform.sed File1.txt 

поэтому весь ваш скрипт может быть:

 awk '{ print "s/sp_"$1"/"$2"/g"}' File2.txt > transform.sed sed -f transform.sed File1.txt ## if you want to remove your transformation file rm transform.sed 
  • Как заменить символ в sed, только если это происходит до буквы?
  • sed regex для группы захвата между разделителями
  • Захват вывода curl после строки в файл
  • Мне нужны подсчеты строк между двумя шаблонами соответствия
  • Заменить текст многострочным шаблоном
  • sed string для точного соответствия, содержащего /
  • Как эхо из определенной строки файла в другую определенную строку
  • Замена символом табуляции в Sed в Osx
  • Я хотел бы стереть предыдущую точку нескольких строк текста
  • использование sed для замены шаблона с помощью хэш-значений
  • как бороться с сложной иерархией?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.