Использование awk
в исходном входном файле перед очисткой :
awk '/account number [[:digit:]]+/ { match($0, "account number ([[:digit:]]+)", a); print NR ";" substr($0, a[1, "start"], a[1, "length"]); }' input
Это извлекает номер счета и печатает номер строки в начале строки:
1;2345356432
3;8623525534
Если вы хотите извлечь предварительно обработанный номер вместо этого из очищенного файла:
awk '/account number [[:digit:]]+/ { match($0, "account number ([[:digit:]]+)", a); print $1 ";" substr($0, a[1, "start"], a[1, "length"]); }' input
Немного разделив его :
/ номер счета [[: digit:]] + /
гарантирует, что мы обрабатываем только строки, соответствующие "номеру счета", за которым следует число; match ($ 0, "номер счета ([[: digit: ]] +) ", a)
снова ищет шаблон и сохраняет позиции и длины совпадающих групп ( ([[: digit:]] +)
, число) в массиве a
; печать NR ";" substr ($ 0, a [1, "start"], a [1, "length"])
печатает номер записи ( т.е. номер строки; используйте FNR
, если вы хотите обработать несколько файлов), за которым следует ;
, за которым следует подстрока, соответствующая первой группе: a [1, "start"]
дает начальный индекс, a [1, «длина»]
его длина (заполнено соответствием
). Все это предполагает, что в каждой строке находится не более одного номера счета.
Второй вариант печатает $ 1
вместо NR
, т.е. первое поле в файле, которое представляет собой предварительно обработанный номер строки.
Решение Арно сработало, но в нем есть небольшая ошибка. Связывание монтирования в fstab должно быть таким (он поменял местами "bind" и "none" ). См. руководство по fstab.
# /etc/fstab
/home/var /var none x-systemd.requires=/home,x-systemd.automount,bind 0 0
Ссылка на монтирование systemd находится здесь:https://www.freedesktop.org/software/systemd/man/systemd.mount.html