Объединить два текстовых файла в один с помощью AWK и добавить недостающие элементы

Если диски, используемые в рейде, одинаковы (вы не заменяете ни один из них ), единственное, что вам нужно сделать на только что установленной системе, это собрать свой массив с:

sudo mdadm --assemble --scan

, а затем «сохранить» конфигурацию:

sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Это необходимо для автоматического запуска массива при загрузке системы.

ПРИМЕЧАНИЕ РЕДАКТОРА:

После того, как вы сохраните состояние упомянутого выше массива, вы должны обновить свой initramfsс помощью:

sudo update-initramfs -u
0
21.08.2020, 15:28
1 ответ

Проблема с вашим подходом:

  • Вы указываете ,в качестве разделителя полей, хотя ваши файлы разделены;-
  • Вы включили программу в ", что приводит к тому, что оболочка интерпретирует $1как позиционные параметры, а не awkкак поля; вы всегда должны заключать awkпрограммы в одинарные кавычки '.
  • Вы строите «список замещающих значений» (, хранящийся в массивеa)из a.txt, хотя вы заявили, что он должен основываться на b.txt.
  • Вы сохраняете только первое поле в этом списке (a[$1]=$1), тогда как вы должны хранить всю строку для копии от b.txtдо a.txt(, т.е.a[$1]=$0).
  • Когда «ключ» (первый элемент )присутствовал в b.txt, вы заменяете только первое поле a.txtсоответствующей строкой из b.txt, хотя вы должны заменить всю строку (т.е. $0=a[$1]вместо$1=a[$1]).

Так что, похоже, вы ищете что-то вроде этого:

gawk -F';' 'FNR==NR{a[$1]=$0; next} ($1 in a) {$0=a[$1]} 1' b.txt a.txt > c.txt
4
18.03.2021, 23:11

Теги

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