Заменить разные строки на основе списка строк в другом файле

Кажется, я понял, что произошло. Я сделал первый rsync, когда службы были активны, поэтому результирующие файлы были повреждены (это нормально).

Затем я остановил службы и сделал второй rsync, чтобы скопировать только различия более быстрым способом.

Это не сработало. Может быть, виноват флаг -t? Может быть, mtime файлов обновляется не каждый раз, когда вы записываете байт, а только когда вы открываете файл для записи?

0
18.10.2018, 17:40
1 ответ

Предполагая, что file1содержит заменяемый текст, file2содержит замещающий текст, и вы можете полагаться на ID=для выполнения поиска между обоими, вы можете использовать этот (более популярный, я думаю )awk-скрипт:

awk -F'\t' '
  NR==FNR{
    a[$1]=$2                                   # fills the array a with the replacement text
    next
  }
  $3=="gene"{                                  # check only lines with 'gene'
    id=gensub("ID=([^;]*);.*","\\1",1,$9);     # extract the id string
    if(id in a)                                # if the id is part of the array a
       gsub(id,a[id])                          # replace it
  }
  1                                            # print the line
' file2 file1
1
28.01.2020, 02:31

Теги

Похожие вопросы