Как заменить каждую новую строку в файле A строкой в ​​той же позиции в файле B - PullRequest
0 голосов
/ 17 января 2020

У меня есть два файла (Файл A и Файл B), которые содержат одинаковое количество строк содержимого.

Файл-A:

a_line_x
a_line_y

a_line_z

a_line_t

Файл-B:

b_line_x
b_line_y
-------------
b_line_z
---##---##---
b_line_t

Я хочу заменить новые строки в файле A на строки, появляющиеся в тех же позициях в файле B (в примере пунктирные линии), что:

a_line_x
a_line_y
-------------
a_line_z
---##---##---
a_line_t

Возможно ли это сделать с помощью linux такие команды, как sed или awk?

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Short awk подход, основанный на Использование getline в переменной из файла :

awk '{ getline r < "file2" }NF == 0{ $0=r }1' file1

Выход:

a_line_x
a_line_y
-------------
a_line_z
---##---##---
a_line_t
0 голосов
/ 17 января 2020

РЕДАКТИРОВАТЬ: Для обработки контрольных символов M в файлах и удаления их перед обработкой попробуйте следующее.

awk '
{
  gsub(/\r/,"")
}
FNR==NR{
  if($0!~/[a-zA-Z]+/){
    a[++count]=$0
  }
  next
}
/^$/{
  print a[++i]
  i=i==2?0:i
  next
}
1
'  fileB  fileA


Не могли бы вы пожалуйста попробуйте следующее.

awk '
FNR==NR{
  if($0!~/[a-zA-Z]+/){
    a[++count]=$0
  }
  next
}
/^$/{
  print a[++i]
  i=i==2?0:i
  next
}
1
'  fileB  fileA
...